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.