Seltsame Ausgabe beim zusammenführen zweier Dateien

Status
Nicht offen für weitere Antworten.

Der Programmierer

Aktives Mitglied
Hi,

ich hab mir vor kurzem einen Dialog geschrieben, welcher 2 .txt Dateien ausließt und den inhalt der beiden dateien in die zweite mit reinschreibt und eigentlich die doppelten Zeilen löschen soll.

So ich hab auch 2 Dateien

datei1.txt enthält:

a
a
b
c
d
e
f
f
g
h
i

datei2.txt enthält

i
j
k
l
l

Das erwartete Ergebnis in datei1 wäre:

a
b
c
d
e
f
g
h
i
j
k
l

Es ist allerdings:

i
a


Der Code sieht wie folgt aus:

Code:
class zusammenfuehren extends JDialog implements Runnable
{
	HashSet<String> liste = new HashSet<String>();	
	LineNumberReader lnr;
	LineNumberReader line;
	int zeilen;
	int zeil;
	BufferedReader getZeilen;
	BufferedReader zaehler;
	String dateiname;
	String name;
	JProgressBar bar;
	double fortschritt;
	String it;
	String zwischen;


	zusammenfuehren(String titel, JFrame f)
	{
		super(f,titel,true);

		FileDialog d = new FileDialog(this, "Datei 1 auswählen", FileDialog.LOAD);
		d.setVisible(true);

		dateiname = d.getDirectory()+d.getFile();

		FileDialog s= new FileDialog(this, "Datei 1 auswählen", FileDialog.LOAD);
		s.setVisible(true);
		
		name = s.getDirectory()+s.getFile();

		try
		{
			zaehler = new BufferedReader(new FileReader(dateiname));

			while(zaehler.readLine() != null);
			{
				zeilen++;
			}

			getZeilen = new BufferedReader(new FileReader(name));

			while(getZeilen.readLine() != null);
			{
				zeil++;
			}
		}

		catch(Exception e)
		{
			e.printStackTrace(); 	
		}
	
			
		


		bar = new JProgressBar(0, zeilen+zeil);

		setResizable(false);
		setLayout(new FlowLayout());
		add(bar);
		pack();

	}

	public void run()
	{
		try
		{
			lnr = new LineNumberReader(new FileReader(dateiname));
			line = new LineNumberReader(new FileReader(name));

			for(int i = 0; i<zeilen; i++)
			{
				zwischen=lnr.readLine();
				liste.add(zwischen);
				fortschritt = fortschritt+0.4;	
				bar.setValue((int)fortschritt);
			}

			for(int i=0; i<zeil; i++)
			{
				zwischen=line.readLine();
				liste.add(zwischen);
				fortschritt = fortschritt+0.4;	
				bar.setValue((int)fortschritt);
			}


			BufferedWriter buffy = new BufferedWriter(new FileWriter(dateiname));
			Iterator <String> tmp = liste.iterator();

			for(int i = 0; tmp.hasNext(); i++)
			{
				it = tmp.next();
				buffy.write(it);
				buffy.newLine();
				fortschritt=fortschritt+0.2;
				bar.setValue((int)fortschritt);
			}

			buffy.close();
			setVisible(false);


			

			
		}

		catch(Exception e)
		{
			e.printStackTrace(); 		
		}
	}


}

Ich hoffe darauf, dass ihr mir mal wieder aus der Patsche helft.
Und dafür bedanke ich mich schon mal im vorraus ;-)
Der Programmierer
 

EOB

Top Contributor
mal ganz fix zusammengebaut..allerdings musst du dann nochmal drueber laufen lassen, wegen den i's in diesem fall. geht aber wesentlich kuerzer und so!

Code:
List file1 = new ArrayList();
	List file2 = new ArrayList();

	try {
	    BufferedReader in = new BufferedReader(new FileReader("/home/jd/Desktop/file1.txt"));
	    String str;
	    while ((str = in.readLine()) != null) {
		if (!file1.contains(str))
		    file1.add(str);
	    }
	    in.close();
	} catch (IOException e) {
	}

	try {
	    BufferedReader in = new BufferedReader(new FileReader("/home/jd/Desktop/file2.txt"));
	    String str;
	    while ((str = in.readLine()) != null) {
		if (!file2.contains(str))
		    file2.add(str);
	    }
	    in.close();
	} catch (IOException e) {
	}

	String string = "";

	for (int i = 0; i < file1.size(); i++) {
	    string += "\n" + file1.get(i);
	}

	for (int i = 0; i < file2.size(); i++) {
	    string += "\n" + file2.get(i);
	}

	try {
	    BufferedWriter out = new BufferedWriter(new FileWriter("/home/jd/Desktop/file3.txt"));
	    out.write(string);
	    out.close();
	} catch (IOException e) {
	}
	System.out.println("ready");

gruesse
 

Leroy42

Top Contributor
Mal ohne try-catches:

Code:
HashSet<String> list = new HashSet<String>();

String line;

BufferedReader br = new BufferedReader(new FileReader(datei1));
while ((line = br.readLine()) != null)
  list.add(line);
br.close();

BufferedReader br = new BufferedReader(new FileReader(datei2));
while ((line = br.readLine()) != null)
  list.add(line);
br.close();

PrintWriter pw = new PrintWriter(new FileWriter(datei1));
for (String s : list)
  pw.println(s);
pw.close();
 

EOB

Top Contributor
in nem hashset sind die dann aber unsortiert und nicht so wie in der datei! die werden nicht geloescht, sie werden gliehc garnicht reingeschrieben...

gruesse
 

Leroy42

Top Contributor
Mørketid hat gesagt.:
in nem hashset sind die dann aber unsortiert...

Huch, das habe ich ja vollkommen übersehen. :oops:
In dem Fall muß natürlich ein TreeSet Verwendung finden.

Edit: Auch das ist ja Unsinn :oops: :oops:
Jetzt weiß ich auf Anhieb(*) auch nicht weiter! :(

(*) Also eine Collection die doppelte Einträge automatisch nicht aufnimmt ohne
die Reihenfolge zu ändern
 

EOB

Top Contributor
warum nehmt ihr denn nicht meins? oder hab ich was falsch verstanden? aber mach dir ma nix draus...das mit dem hash war auch meine erste idee ;-).

gruesse
 

Der Programmierer

Aktives Mitglied
es ist egal in welcher reihenfolge die einträge sind. Es dürfen nur keine verloren gehen oder doppelt sein. Bei mir ging irgendwie die hälfte immer flöten! Wie oben gesagt!
 

Leroy42

Top Contributor
Der Programmierer hat gesagt.:
ich hab jan Hashset aber irgendwie verflüchtigen sich einträge häufig/immer.

Das wohl weniger! :cool:

Es ist allerdings so, daß mir deine Lösung zu umständlich ist um sie nach
Fehlern zu durchsuchen. Beispielsweise bestimmst du im Konstruktor die
Anzahl der Zeilen und nimmst darauf in der Methode run Bezug. Wozu? :autsch:
(Das ist bestimmt auch der Grund, warum auch Moerketid lieber einen eigenen
Lösungsweg geschrieben hat :cool: )

Meine Vorgehensweise müßte eigentlich direkt funktionieren;
hast du sie ausprobiert?
 

EOB

Top Contributor
das hier funzt....

Code:
List file1 = new ArrayList();
	List file2 = new ArrayList();

	try {
	    BufferedReader in = new BufferedReader(new FileReader("/home/jd/Desktop/file1.txt"));
	    String str;
	    while ((str = in.readLine()) != null) {
		if (!file1.contains(str))
		    file1.add(str);
	    }
	    in.close();
	} catch (IOException e) {
	}
	Set temp = new HashSet(file1);
	file1 = new ArrayList(temp);
	try {
	    BufferedReader in = new BufferedReader(new FileReader("/home/jd/Desktop/file2.txt"));
	    String str;
	    while ((str = in.readLine()) != null) {
		if (!file1.contains(str))
		    file2.add(str);
	    }
	    in.close();
	} catch (IOException e) {
	}

	temp = new HashSet(file2);
	file2 = new ArrayList(temp);

	String string = "";

	for (int i = 0; i < file1.size(); i++) {
	    string += "\n" + file1.get(i);
	}

	for (int i = 0; i < file2.size(); i++) {
	    string += "\n" + file2.get(i);
	}

	try {
	    BufferedWriter out = new BufferedWriter(new FileWriter("/home/jd/Desktop/file3.txt"));
	    out.write(string);
	    out.close();
	} catch (IOException e) {
	}

kann man aber wie gesagt noch erheblich kuerzen!

gruesse
 

Leroy42

Top Contributor
Also ohne deinen Code vollständig durchzulesen, fällt mir schon dies auf
Mørketid hat gesagt.:
das hier funzt....

Code:
List file1 = new ArrayList();
List file2 = new ArrayList();
...

Wozu benötigst du zwei ArrayListen, wenn doch nur eine HashSet ausreichen würde? ???:L
 

EOB

Top Contributor
wie gesagt, geht noch um einiges kuerzer ;)...ein wenig refactoring wuerde danach nicht schaden...das steht fest.

gruesse
 

Der Programmierer

Aktives Mitglied
danke für den codevon dir. Ich benutze ihn auch und es klappt super. Mich würde aber trotzdem intressieren wieso mein code nicht klappt ;-)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Variablen Addition von Double-Werten ergibt seltsame 0.9999999 Zahlen Allgemeine Java-Themen 2
VfL_Freak Große und seltsame Probleme nach Java-Update auf V1.8.0_91 Allgemeine Java-Themen 3
KilledByCheese Dezimal nach Hexadezimal rechner wirft seltsame exception Allgemeine Java-Themen 4
javampir Seltsame Lücken beim Abspielen von Sound Allgemeine Java-Themen 2
J Seltsame Exception beim Java Applet einbinden in Html Allgemeine Java-Themen 2
T Seltsame duplikate Methoden Allgemeine Java-Themen 2
E seltsame Parameterdeklaration Allgemeine Java-Themen 19
L Seltsame Klassen Allgemeine Java-Themen 2
U Seltsame Exception Allgemeine Java-Themen 10
R seltsame virenwarnung Allgemeine Java-Themen 2
C Seltsame Konstanten (und Verwendung) Allgemeine Java-Themen 15
kodela Gemittelte Ausgabe von Buchstaben Allgemeine Java-Themen 11
L Event Handling Ausgabe von Radioboxen und befüllen von Comboboxen Allgemeine Java-Themen 1
curranux Ausgabe als Textdatei schreiben. Allgemeine Java-Themen 2
Master3000 Komisches Zeichen als Ausgabe in der Konsole Allgemeine Java-Themen 20
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
R In der Ausgabe sollte anstelle des obersten Sterns ein "+" stehen nur scheitere ich bei der Implementierung Allgemeine Java-Themen 9
L Ausgabe von in Echtzeit ausgeführten Code Allgemeine Java-Themen 9
B System.out Ausgabe auf jtextarea Fehlersuche Allgemeine Java-Themen 8
J Ausgabe von Links nach Rechts ausgeben? Allgemeine Java-Themen 2
AssELAss Log4j Logging Ausgabe für jede Klasse in seperates File Allgemeine Java-Themen 2
heyluigi Random Integer Array Ausgabe nach Größe sortieren Allgemeine Java-Themen 6
B Game of life Ein und Ausgabe Configurations Datei Allgemeine Java-Themen 17
Exdroid BlueJ Wie bekomme ich die Ausgabe in eine TXT Datei? Allgemeine Java-Themen 2
M Input/Output CMD Ausgabe als ButtonEvent Allgemeine Java-Themen 5
Tausendsassa Input/Output Problem mit der gleichzeitigen Ausgabe zweier Threads Allgemeine Java-Themen 8
S 2-spaltige Ausgabe als Tabelle ausgeben Allgemeine Java-Themen 12
C Hilfe bei einer Point Ausgabe Allgemeine Java-Themen 7
B JFrame Text Ausgabe Allgemeine Java-Themen 7
D Variablen Ausgabe bzw. einlese Fehler Allgemeine Java-Themen 7
M Eclipse Keine Ausgabe mehr bei Fehlern Allgemeine Java-Themen 3
O log4j, Problem bei Ausgabe null-Wert Allgemeine Java-Themen 0
J Ausgabe nach Excel Allgemeine Java-Themen 1
balwan Unverständlichkeit einer Ausgabe Allgemeine Java-Themen 4
K Input/Output Ausgabe in Textdatei Allgemeine Java-Themen 7
B Barcode4j Ausgabe Formatieren Allgemeine Java-Themen 3
S Speichern/Laden/Hinzufügen/Löschen der Array-Wörter; unerwartete Ausgabe Allgemeine Java-Themen 6
H Scanner: Ausgabe erst nach Abbruch Allgemeine Java-Themen 8
K Methoden Ausgabe erfolgt nicht Allgemeine Java-Themen 6
T Ausgabe falsch! Allgemeine Java-Themen 5
W Input/Output Ausgabe eines Statements Allgemeine Java-Themen 5
P Falsche Ausgabe Allgemeine Java-Themen 5
nutellastulle Zugriff, Übergabe, Bearbeitung und Ausgabe von Jlist Allgemeine Java-Themen 6
D Ausgabe von C# Konsolenanwendung lesen Allgemeine Java-Themen 5
O Input/Output CMD-Ausgabe abfangen und in Datei speichern Allgemeine Java-Themen 8
P Pdf ausgabe Allgemeine Java-Themen 3
schlingel Process - Ausgabe leer Allgemeine Java-Themen 5
C Ausgabe unklar Allgemeine Java-Themen 2
J Applet Ausgabe beim Speichern ausblenden Allgemeine Java-Themen 4
Rudolf Java Ausgabe einer Texttabelle im Prompt Allgemeine Java-Themen 4
P Ausgabe der berechneten Fakultaet Allgemeine Java-Themen 12
M Ausgabe in Datei zum Ausdruck Allgemeine Java-Themen 2
E formartierte Ausgabe zur Laufzeit Allgemeine Java-Themen 2
D Bildschirm Flackert bei Ausgabe Allgemeine Java-Themen 4
K Windows Fehlerkanal -> Ausgabe in Datei Allgemeine Java-Themen 6
H Ausgabe von zwei Textfeldern Allgemeine Java-Themen 3
R log4j - Ausgabe der Logs Allgemeine Java-Themen 3
L in zufälligen Sekunden Ausgabe machen Allgemeine Java-Themen 2
W Ausgabe beschleunigen? Allgemeine Java-Themen 3
O Backslashes werden in der Ausgabe nicht übernommen Allgemeine Java-Themen 5
X Ausgabe auf JEditorPane Allgemeine Java-Themen 5
B Ausgabe auf der Konsole bei Nebenläufigkeit, Threads und Synchronisation Allgemeine Java-Themen 8
A Ausgabe in OpenOffice Calc oder pdf Allgemeine Java-Themen 3
T Ausgabe in txt.Datei speichern Allgemeine Java-Themen 23
S Boolean Ausgabe JasperReports Allgemeine Java-Themen 2
M Consolen Ausgabe Allgemeine Java-Themen 3
G Ausgabe mit tag Allgemeine Java-Themen 3
W Ausgabe von Fließkommazahlen formatieren Allgemeine Java-Themen 2
D Ausgabe HTML-Seite Allgemeine Java-Themen 5
H Externe Prozesse und Inputstreams - ausgabe in JTextArea Allgemeine Java-Themen 3
G Ausgabe in eine txt Datei schreiben? Allgemeine Java-Themen 7
T Wieso erfolgt keine Ausgabe. /Excel Allgemeine Java-Themen 19
J Ausgabe der Quelltext Zeilennummer? Allgemeine Java-Themen 12
B serlvet system.out ausgabe Allgemeine Java-Themen 4
B Ausgabe auf stdout "löschen" und dafür neue Ausgab Allgemeine Java-Themen 10
X e.printStackTrace Ausgabe in Datei umleiten? Allgemeine Java-Themen 14
B Ausgabe mit print wird verzögert Allgemeine Java-Themen 9
D Dateien und ordner ausgabe Allgemeine Java-Themen 5
M Rekursive Ausgabe einer linkedList Allgemeine Java-Themen 8
M Ausgabe in Console formatieren`? Allgemeine Java-Themen 12
I Composite Pattern für Ausgabe von Ausdruck Allgemeine Java-Themen 3
H falsche ausgabe Allgemeine Java-Themen 15
S Datei Ausgabe Allgemeine Java-Themen 4
T Fehlersuche bzw. woher kommt diese ausgabe? Allgemeine Java-Themen 2
D Formatierte Ausgabe vom ProcessBuilder Allgemeine Java-Themen 4
S Endlos-Schleife bei Ausgabe von ArrayList Allgemeine Java-Themen 6
L Ausgabe auf GUI verzögert Allgemeine Java-Themen 2
D Die Ausgabe von Tidy in eine Datei umleiten Allgemeine Java-Themen 3
R Vorzeichen bei der Ausgabe Allgemeine Java-Themen 7
G Problem mit Ausgabe-Kanälen Allgemeine Java-Themen 2
T Ausgabe bei Struktogrammen Allgemeine Java-Themen 2
G JTextField: Feld für Ausgabe von Meldungen Allgemeine Java-Themen 14
B Formatierte Ausgabe Allgemeine Java-Themen 3
G Einlesen der Ausgabe eines Shellskripts mit Java Allgemeine Java-Themen 2
B Fehler bei Ausgabe in Datei Allgemeine Java-Themen 11
G Ausgabe Allgemeine Java-Themen 9
berserkerdq2 Weiß jemand wie ich im Scenebuilder das Fenster so darstellen kann, dass beim Vollbildmodus die Objekte so angezeigt werden? Allgemeine Java-Themen 1
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
B Mysteriöse Ergebnisse beim Baccarat Programm? Allgemeine Java-Themen 13
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben