Input/Output FileOutputStream - neue Zeile mit write(10)

Corben

Mitglied
Hallo ich hab folgenden Problem:

[JAVA=17]while(iter.hasNext()){
String a1 = iter.next().toString();

for (int i=0; i<a1.length();i++)
fos.write((byte)a1.charAt(i));
fos.write(10);
}
} [/code]

in der txt steht alles, nur ohne \n. Also alles aneinander geklatscht. Wenn ich mir mit read() eine txt auf der Konsole ausgeben lasse, schreibt er bei "\n" 10. Wenn ich jetzt in meinem Code 55 anstatt 10 schreibe, dann wird hiter jeden Eintrag die 7 gehängt, 32 (" ") geht auch.
Was muss ich machen, damit mir die Einträge untereinander angezeigt werden?

Thx🙂
 
Ich stelle einfach mal eine wilde Vermutung an: du benutzt Windows und um zu überprüfen was er geschrieben hat, öffnest du die Datei mit dem Ding, was "Editor" genannt wird?
In Windows besteht ein Zeilenumbruch nicht aus #10, sondern aus #13#10. Also kann Editor mit der einzigen 10 nichts anfangen.
Aber es sieht etwas kreativ aus, was du da machst. Vlt beschreibst du, was du vorhast.
 
[JAVA=17]while(iter.hasNext()){
String a1 = iter.next().toString();

for (int i=0; i<a1.length();i++)
fos.write((byte)a1.charAt(i));
fos.write(10);
}
} [/code]

Was muss ich machen, damit mir die Einträge untereinander angezeigt werden?

[JAVA=17]while(iter.hasNext()){
String a1 = iter.next().toString();

for (int i=0; i<a1.length();i++)
if (a1.charAt(i) == 10) { fos.write((byte) 13); }
fos.write((byte)a1.charAt(i));
fos.write(10);
}
} [/code]

Soll heißen, iter liefert irgendwann Strings, in denen ein Zeilenumbruch nur \n ist. Windows benötigt dafür aber \r\n. Deshalb wird dann ein \r angehängt.

Poste mehr Code, dann können wir mehr helfen. Achja, bei Zeichen mit UTF8-Wert > 127 funktioniert obiges nicht mehr.
 
Wieso denn so schwierig? Man schachtele den FileOutputStream z.B. mit einem PrintStream und verwende von diesem dann die "println()"-Methoden. Diese Methoden schreiben je nach Betriebssystem die jeweiligen Zeilenumbrüche automatisch und verfügen ferner auch über die für einen Stream üblichen "write()"-Methoden 😉
 
Auf Grundlage dessen, was bisher gepostet wurde, wissen wir nicht, für welchen Anwendungsfall er das braucht. Von daher rate ich lieber nicht übereilig und -eifrig zu irgendetwas.
Oben muss noch eine Klammer hin.
 
Vielen Dank schonmal.
Und XHelp hat vollkommen recht mit seiner Vermutung 🙂
Ich werde erst heut Abend Zeitfinden mich wieder eingehender damit zu beschäftigen.
Also der Fall ist so:
Ich habe eine ArrayList namens "produkte", gefüllt mit Objekten vom Typ "Produkt". Ich will alle Produkte in die IO.txt schreiben (untereinander).

Meine Lösung mit der while Schleife und der for, erschien mir nicht sonderlich aufwending. Werd mir diesbezüglich aufjedenfall mal "println()" angucken.

Und hier noch der Code:
Produktverwaltung:
Java:
import java.io.*;
import java.util.*;

public class Produktverwaltung {	
	public static ArrayList<Produkt> produkte = new ArrayList<Produkt>();
	public static void setp()throws IOException{
		produkte.add(new Produkt("Südwein", 24.99));		
		produkte.add(new Produkt("Edelburgunder", 129.99));
		produkte.add(new Produkt("Speisekäse", 3.49));
		produkte.add(new Produkt("Erdammer", 5.99));
		produkte.add(new Produkt("Trüffel", 1499.00));
		
		Iterator iter = produkte.iterator();

		FileOutputStream fos = new FileOutputStream("Z:\\EI 2\\Eclipse\\Übung09_5\\src\\IO.txt");
		
		while(iter.hasNext()){
			String a1 = iter.next().toString();
			
			for (int i=0; i<a1.length();i++)
				fos.write((byte)a1.charAt(i));
			fos.write(10);
		}
	}	
}

Produkt:
Java:
public class Produkt {
	String name;
	double preis;
	public Produkt (String name, double preis){
		this.name=name;
		this.preis=preis;
	}
	
	public String toString(){
		return name+", "+preis;
		
	}
}
 
Einfacher und besser zu lesen ist:
Java:
List<Produkte> produkte = ...;
FileOutputStream fos = ...
PrintStream ps = new PrintStream(fos);
for(Produkt p : produkte) {
    ps.println(p);
}
ps.close();
fos.close();
 

Neue Themen


Zurück
Oben