1. November 2010: Ein Filesystem in Excel

Vor kurzem musste ich die Datei- und Ordner-Struktur unserer File-Server abbilden (mit Zeitstempel der letzten Änderung). Idealer Weise in einer Form, in der man die Daten in einer Tabellenkalkulation weiter bearbeiten konnte. Mit Standard-Mitteln war zu viel manueller Aufwand involviert und die üblichen Skriptsprachen waren zu unflexibel. Daher habe ich meine reichlich angestaubten Java-Fähigkeiten bemüht und ein kleines Tool dafür geschrieben:

public class FileCrawler{
public static void main(String args[]){
	String root = ".";
	if(args.length > 0)
		root = args[0];
	FileCrawler fc = new FileCrawler(root);
}

java.io.FileWriter fout;
java.text.SimpleDateFormat dformat;

public FileCrawler(String root){
	try{
		this.fout = new java.io.FileWriter("FileCrawler.txt");
	} catch(java.io.IOException e){
		System.err.println("Could not write to FileCrawler.txt, using Console...");
	}
	this.dformat = new java.text.SimpleDateFormat("M/d/y  h:m:s a");
	
	this.crawl(root);
	
	try{ this.fout.close(); } catch(java.io.IOException e){ }
}

private void crawl(String path){
	java.io.File root = new java.io.File(path);
	if(!root.exists() && !root.isDirectory()){
		System.err.println("Invalid path: " + path);
		return;
	}

	try{
		java.io.File files[] = root.listFiles();
		for(int i = 0; i < files.length; i++){
			if(files[i].isDirectory())
				this.crawl(root.getPath() + java.io.File.separator + files[i].getName());
			else
				this.writeFile(path, files[i].getName(), files[i].lastModified());
		}
	} catch(java.lang.Exception e){
		System.err.println("Access denied: " + path);
	}
}

private void writeFile(String path, String file, long timestamp){
	String modified = this.dformat.format(new java.util.Date(timestamp));
	String msg = path + "\t" + file + "\t" + modified;
	try{
		this.fout.write(msg + "\n");
	} catch(java.io.IOException e){
		System.out.println(msg);;
	}
}
}

Es nimmt einen zu scannenden Pfad als Parameter entgegen und schreibt die Ergebnisse als CSV-Datei weg. Vielleicht hilft es ja jemandem weiter. Und bedenken: Excel 2003 kann nur bis zu 46500 Zeilen verwalten!