Ohjelma listaa kaikki annetun kansion tiedostot ja tulostaa tiedostolistauksen tiedostoon C:/filelist.txt.
Valmiiksi käännetyn luokan voi hakea http://www.paivola.fi/~sami/java/FileLister/FileLister.class
Käyttö: java Filelister [kansio]
Jos kansiota ei ole annettu, niin listaus tehdään siitä kansiosta, missä ajettava tiedosto on.
import java.io.*; import java.util.Vector; public class FileLister { public static void main(String[] args) { long alkuaika = System.currentTimeMillis(); //Jos ohjelmalle on annettu parametriksi jotain, niin tehdään tiedostolistaus annetusta kansiosta //muuten tehdään listaus siitä kansiosta, missä tiedosto ajetaan... String folder; if (args.length == 0) folder = "."; else folder = args[0]; //Aloitetaan tiedostojen hakeminen Vector fileList = listFiles(new File(folder), new Vector()); //Lopuksi tulostetaan tiedostolistaus (+ tiedostojen koko) tiedostoon C:/filelist.txt //Tulostustiedostoksi voi myös muuttaa esim. folder + "/filelist.txt", jos haluaa tiedostolistauksen //siihen kansioon, minkä tiedostolistauksen teki. //Lasketaan samalla myös tiedostojen yhteiskoko long size = 0; try { BufferedWriter output = new BufferedWriter(new FileWriter("C:/filelist.txt")); for (int i = fileList.size()-1; i > 0; --i) { File file = (File)(fileList.get(i)); output.write(file.getAbsolutePath() + "\t" + file.length() + "\r\n"); size += file.length(); } output.close(); } catch (IOException e) { } System.out.println("Tiedostoja ja kansioita yhteensä: " + fileList.size()); System.out.println("Tiedostojen koko yhteensä: " + size + " B"); System.out.println("Tiedostojen koko yhteensä: " + size / Math.pow(2, 20) + " MB"); long loppuaika = System.currentTimeMillis(); System.out.println("Listaaminen kesti " + (loppuaika-alkuaika) + " ms"); } public static Vector listFiles(File folder, Vector fileList) { File[] files; File[] folders; try { File dir = new File(folder.getPath()); //Haetaan kansion tiedosto- ja kansiolistaus files = dir.listFiles(); //Otetaan kaikki kansiot erilliseen muuttujaan FileFilter fileFilter = new FileFilter() { public boolean accept(File file) { return file.isDirectory(); } }; folders = dir.listFiles(fileFilter); //Lisätään tiedostot ja kansiot vektoriin for (int i = 0; i < files.length; i++) { fileList.add(files[i]); } //Kutsutaan metodia uudestaan jokaiselle löydetylle kansiolle for (int i = 0; i < folders.length; i++) { listFiles(folders[i], fileList); } } catch (Exception e) { System.out.println("Joku homma kusahti vähän..."); e.printStackTrace(); } //Lopuksi palautetaan löytyneiden kansioiden ja tiedostojen lista. return fileList; } }
Vähän huono tallentaa oletuksena paikkaan "C:", jos on Linux tai Macintosh käytössä.
lainaus:
Joku homma kusahti vähän...
java.lang.NullPointerException
at FileLister.listFiles(FileLister.java:63)
at FileLister.main(FileLister.java:15)
joo... Käännetystä versiosta se on vähän hankalampi muuttaa, mutta sorsasta ei pitäisi olla kovin hankalaa :)
Lähinnä se on C:/ sen takia, että en halunnut koneeltani löytyvän pariakymmentä filelist.txt:tä ympäriinsä siroteltuina, kun kokeilin tuon toimivuutta tuollaisenaan ja vähän muuteltuna aika monessa eri kansiossa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.