Hi, ich bin noch neu im Java-Programmieren. Ich wollte ein Programm schreiben, welches aus einer .txt Datei Zeilen ausliest, diese in einer ArrayList speichert und alle weiteren einliest und überprüft ob diese schon irgendwo vorhanden sind. Falls nicht, sollen diese an die Liste anfügt werden.
Mein Problem ist, bei großen Dateien dauert das aber sehr lange. Es wird ja immer die komplette Liste überprüft. Kann ich das irgendwie schneller gestalten? Ich bin bisher einfach auf keine Lösung gekommen, da ich ja nicht drum rum komme immer die schon eingelesenen Zeilen für jede Zeile neu zu überprüfen.
Mein Problem ist, bei großen Dateien dauert das aber sehr lange. Es wird ja immer die komplette Liste überprüft. Kann ich das irgendwie schneller gestalten? Ich bin bisher einfach auf keine Lösung gekommen, da ich ja nicht drum rum komme immer die schon eingelesenen Zeilen für jede Zeile neu zu überprüfen.
Java:
if (!file.canRead() || !file.isFile())
System.exit(0);
in = null;
try {
in = new BufferedReader(new FileReader(datName));
String row= null;
System.out.println("");
System.out.println("");
System.out.println(dateiName + " wird gelesen.");
while ((row = in.readLine()) != null) { // Dateizeilen einlesen
int counter = 0;
if (0 == results.size()) { // Falls noch keine Zeile eingelesen wurde wird die erste ohne Überprüfung eingefügt
results.add(row);
}
else {
for (int i = 0;i<results.size();i++){ // Falls diese Zeile schon einmal irgendwo vorhanden ist wird die nächste Zeile eingelesen
if (row.equals(results.get(i))) {
counter++;
}
}
if (counter == 0){ // Falls noch nicht vorhanden wird die Zeile zu der Liste hinzugefügt
results.add(row);
}
}
}
FileWriter fw = new FileWriter(endName); // Nachdem die Datei abgearbeitet ist wird eine neue Datei erzeugt in die der Inhalt der Liste eingefügt wird
BufferedWriter bw = new BufferedWriter(fw);
for (int i = 0;i<results.size();i++){
bw.write(results.get(i));
bw.newLine();
}
bw.close();
System.out.println("");
System.out.println("");
System.out.println(endName + " wurde erzeugt.");
} catch (IOException e) {
e.printStackTrace();
} finally {
if (in != null)
try {
in.close();
} catch (IOException e) {
}
}