Java ListArray auf Duplikate überprüfen und in .txt speichern?
Morgen,
derzeit bin ich gerade dabei eine bereits vorhandene Text-Datei in einer ListArray zu speichern. Soweit klappt das auch. Jetzt möchte ich jedoch die ListArray auf duplikate überprüfen
Bsp.
Textdatei lautet:
Test
Test1
Test
Test2
Test2
Nun soll die erste Zeile in eine neue Datei gespeichert werden und ein "boolean gefunden" auf true gesetzt werden. So das, wenn er in Zeile 3 ankommt, diese überspringt und nicht schreibt.
Allerdings habe ich keine Ahnung, wie ich es umsetzten kann. Mit contains?
1 Antwort
public static void main(String[] args) throws IOException {
// ArrayList mit Testdaten erzeugen
ArrayList<String> original = new ArrayList<String>(Arrays.asList(
"Test",
"Test1",
"Test",
"Test2",
"Test2"
));
// Neue Arraylist ohne Duplikate erzeugen
ArrayList<String> ohneDuplikate = new ArrayList<String>(original.stream().distinct().toList());
// In einer .txt Datei speichern
FileWriter outFile = new FileWriter("C:\\temp\\test.txt");
outFile.write(String.join("\n", ohneDuplikate));
outFile.close();
}
Wenn es nicht zwangsweise ArrayList sein müssen, kannst du auch einfach List<String> nehmen. Dann kannst du die beiden "new ArrayList<String>" weglassen.
Also du willst eine Textdatei einlesen und alle Wörter untereinander in eine neue Datei schreiben, nur halt ohne Duplikate?
public static void dateiVerarbeiten(String fromPath, String toPath) throws IOException {
// Alle Wörter aus der Quelldatei einlesen (Die Prüfung, ob es die Datei gibt, müsstest du selbst noch einbauen)
Scanner in = new Scanner(new File(fromPath));
List<String> allWords = in.tokens().toList();
in.close();
// Wörter ohne Duplikate in einer neuen Datei speichern
FileWriter out = new FileWriter(toPath);
out.write(String.join("\n", allWords.stream().distinct().toList()));
out.close();
}
Du kannst es auch ohne den Umweg über eine List machen.
public static void dateiVerarbeiten(String fromPath, String toPath) throws IOException {
Scanner in = new Scanner(new File(fromPath));
FileWriter out = new FileWriter(toPath);
out.write(String.join("\n", in.tokens().distinct().toList()));
in.close();
out.close();
}
Beim Aufruf musst du halt einfach die Dateinamen angeben.
dateiVerarbeiten("C:\\temp\\quelle.txt", "C:\\temp\\ziel.txt");
Ich habe es so gemacht:
package deleteAlgorithmus;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
public class test {
public static void main(String[] args) {
boolean gefunden = false;
if (gefunden == false) {
dateiEinlesen(null, gefunden);
}
}
public static void dateiEinlesen(File neueDatei, boolean gefunden) {
String suche = "test";
String suche2 = "test1";
BufferedReader reader;
String zeile = null;
try {
reader = new BufferedReader(new FileReader("C:\\programme\\Test.txt"));
zeile = reader.readLine();
ArrayList<String> arr = new ArrayList<String>();
while (zeile != null) {
arr.add(zeile.split(" "));
zeile = reader.readLine();
}
System.out.println(arr);
} catch (IOException e) {
System.err.println("Error2 :" + e);
}
ArrayList<String> ohneDuplikat = new ArrayList<String>(arr.join)
FileWriter neueDatei = new FileWriter("C:\\Dokumente\\xxx.txt");
neueDatei.write(String.join(delimiter, elements));
}
public static void duplikatEntfernen(String suche, String suche2, boolean gefunden, File neueDatei,
ArrayList<String> arr) throws IOException {
BufferedWriter schreiben = new BufferedWriter(new BufferedWriter(new FileWriter(neueDatei)));
try {
}
}
}
Allerdings kann ich deines nirgends einfügen, da ich ansonsten Fehlermeldungen bekommen. Bspw. bei toList