G
Guest
Gast
Hi,
ich habe lange im Internet nach einem Programm gesucht, dass sehr große Textdateien (100 MB+) einlesen, Duplikate entfernen, und das Ganze wieder speichern kann.
Da ich nichts passendes gefunden habe, habe ich mir selbst was geschrieben.
Folgende Aufgaben sollen erledigt werden:
1. Effizient aus Datei einlesen (RAM Verbrauch steigt bei 100 MB Datei auf 700 MB)
2. Duplikate entfernen
3. Optional Datei sortieren
4. Ergebnis in neue Datei speichern
Eine TextDatei sieht ca. so aus:
Hier mein bisheriges Programm:
Wo kann man dort noch etwas optimieren?
ich habe lange im Internet nach einem Programm gesucht, dass sehr große Textdateien (100 MB+) einlesen, Duplikate entfernen, und das Ganze wieder speichern kann.
Da ich nichts passendes gefunden habe, habe ich mir selbst was geschrieben.
Folgende Aufgaben sollen erledigt werden:
1. Effizient aus Datei einlesen (RAM Verbrauch steigt bei 100 MB Datei auf 700 MB)
2. Duplikate entfernen
3. Optional Datei sortieren
4. Ergebnis in neue Datei speichern
Eine TextDatei sieht ca. so aus:
Auto
laufen
Hund
laufen
Auto
Schmuck
Zeitung
...
Hier mein bisheriges Programm:
Code:
public class Main {
private static final String INPUT_FILE = "1u2.txt";
private static final String OUTPUT_FILE = "out.txt";
public void writeFile(String filename, List<String> list){
BufferedWriter b = null;
try {
b = new BufferedWriter (new FileWriter (filename));
for(int i=0;i<list.size();i++){
b.write(list.get(i));
b.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}
finally{
try {
b.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public List<String> readFile(String filename) {
List<String> list = new ArrayList<String>();
String line = "";
try {
FileReader file = new FileReader(filename);
BufferedReader data = new BufferedReader(file);
while ((line = data.readLine()) != null) {
list.add(line);
}
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e2) {
e2.printStackTrace();
}
return list;
}
public List<String> sortFile(List<String> list){
Collections.sort(list);
return list;
}
public void print(List<String> list){
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
public List<String> removeDuplicates(List<String> list){
Set<String> set = new HashSet<String>();
set.addAll(list);
list.clear();
list.addAll(set);
return list;
}
public static void main(String[] argv){
Main main = new Main();
List<String> list = main.readFile(INPUT_FILE); // einlesen
list = main.removeDuplicates(list); // duplikate entfernen
list = main.sortFile(list); // sortieren
//main.print(list); // optional ausgeben
main.writeFile(OUTPUT_FILE, list); // in datei schreiben
}
}
Wo kann man dort noch etwas optimieren?