Aufgabe zu IO

Ich muss folgende Aufgabe zum Thema I/O möglichst gut und ordentlich lösen:

http://jeebone.je.funpic.de/java/1.JPG

das hab ich bisher folgendermaßen gemacht:

import java.io.*;
import java.util.ArrayList;

public class FileComper {

	{
		ArrayList<File> files = new ArrayList<File>();
		ArrayList<String> filestrings = new ArrayList<String>();
		BufferedReader in;
		
		for(int i = 0; i < args.length; i++)
			files.add(new File(args**));
		
		for(int i = 0; i < files.size(); i++)
		{
			in = new BufferedReader(new FileReader(files.get(i)));
			String bufferstring;
			while((bufferstring = in.readLine()) != null) { }
			filestrings.add(bufferstring);
		}
		
		System.out.print("Files different from file1: ");
		for(int i = 1; i < filestrings.size(); i++)
			if(filestrings.get(i) != filestrings.get(0))
				System.out.print(args** + " ");
	}
	
}```


da ich aber noch Anfänger bin, wird das sicher nicht perfekt sein, könntet ihr mir sagen, wo da noch was zu verbessern ist, bzw wo was nicht so schön ist usw ...

Hm … -_- das könnte so OK sein, aber ein paar Stichpunkte:

  • Die Größe der Dateien wird bei dir nicht berücksichtigt
  • Strings vergleicht man nicht mit “!=”, sondern mit !string0.equals(string1)
  • List files = new ArrayList(); ist allgemeiner (List statt ArrayList)
  • Die Daten als Strings zu lesen könnte … unschöne Effekte bei nicht-ASCII-Dateien haben. Es dürfte auf die Funktionalität des Programms eigentlich keinen Einfluß haben, aber für sowas würde man eher Streams statt Readern verwenden…

Weitere Probleme:

  • Jeder Stream oder Reader muss mit “close” wieder geschlossen werden.
  • Was passiert, wenn eine Datei mehr als eine Zeile Text beinhaltet? (Tipp: probier es einfach mal aus)

Ich würde die Dateien byteweise vergleichen, nicht über Strings. Das ist viel einfacher. Und ich würde nur die erste Datei im Memory halten, die anderen Dateien kann man während dem Lesen testen.

Hoppala - die “{ }” hatte ich ganz übersehen :o