Computer Hardware Forum - TweakPC

Computer Hardware Forum - TweakPC (https://www.tweakpc.de/forum/)
-   Programmiersprachen (https://www.tweakpc.de/forum/programmiersprachen/)
-   -   [Java] Problem mit FileWriter (https://www.tweakpc.de/forum/programmiersprachen/33397-java-problem-mit-filewriter.html)

redfalcon 24.02.2006 16:49

[Java] Problem mit FileWriter
 
Huhu,

in der Schule haben wir eine Klasse programmiert, die einfach eine Textdatei mit Inhalt auf die Festplatte schreibt. Nun wollte ich dieses Programm so "verbessern", dass man Dateinamen und Inhalt per Eingabe vom Nutzer festlegt. Funzt aber leider nicht. Die Datei wird einfach nicht erstellt. Lege ich Inhalt und Dateiname im Code fest, funktioniert alles. Warum aber nicht, wenn die Eingaben vom User gemacht werden sollen? Die Fehler muss ganz banal sein, da auch unser Tewi-Lehrer ewig mit mir rumprobiert hat. Die *.txt Datei wird im selben Verzeichnis erstellt werden, aus der das Programm gestartet wird.

Code:

[php]
import java.io.*;

public class Stream{

public Stream(){

}

//Input-Methode
public String stringInput(){
StringBuffer temp = new StringBuffer();
InputStreamReader ir = new InputStreamReader(System.in);
try {
do {
int i = ir.read();
if(i != 10 && i != 13)
temp.append((char) i);
} while ( ir.ready());

}

catch (IOException e) {

}
return temp.toString();





}

public void dateiSchreiben(String datei, String inhalt){

File fi = new File(datei);
try{
//Falls Datei existiert, lösche die Datei und erstelle Neue.
if ( fi.exists() ) {
fi.delete();
fi.createNewFile();
}

//Inhalt in Date schreiben.
FileWriter fw = new FileWriter(fi);
fw.write(inhalt);
fw.close();
}
catch(IOException e){

}


}


public static void main (String args[]){
String datei; //Dateiname
String inhalt; //Inhalt der Datei

Stream se = new Stream();

System.out.println("Dateiname im Format xyz.txt eingeben: ");
datei = se.stringInput();
System.out.println(datei); //Nur zur Überwachung
System.out.println("Inhalt der Datei eingeben: ");
inhalt = se.stringInput();
System.out.println(inhalt); //Nur zur Überwachung

se.dateiSchreiben(datei, inhalt);

}
}
[/php]


Edit: Problem gelöst. Gab wohl ein Problem mit der Eingabe. Funktionierender Code:

[php]
import java.io.*;

public class Stream{

public Stream(){

}

//Input-Methode
public String stringInput(){
StringBuffer temp = new StringBuffer();
InputStreamReader ir = new InputStreamReader(System.in);
try {
do {
temp.append((char) ir.read());
} while ( ir.ready());

}

catch (IOException e) {

}
return temp.toString();





}

public void dateiSchreiben(String datei, String inhalt){

File fi = new File(datei);
try{
//Falls Datei existiert, lösche die Datei und erstelle Neue.
if ( fi.exists() ) {
fi.delete();
fi.createNewFile();
}

//Inhalt in Date schreiben.
FileWriter fw = new FileWriter(fi);
fw.write(inhalt);
fw.close();
}
catch(IOException e){

}


}


public static void main (String args[]){
String datei; //Dateiname
String inhalt; //Inhalt der Datei

Stream se = new Stream();

System.out.println("Dateiname im Format xyz.txt eingeben: ");
datei = se.stringInput();
System.out.println(datei); //Nur zur Überwachung
System.out.println("Inhalt der Datei eingeben: ");
inhalt = se.stringInput();
System.out.println(inhalt); //Nur zur Überwachung

se.dateiSchreiben(datei, inhalt);

}
}
[/php]

tele 25.02.2006 15:29

AW: [Java] Problem mit FileWriter
 
Hi,

sory für die späte Meldung, ich kam erst recht spät auf den Fehler.
Sicher hast du deinen Code noch nicht durch einene Debugger gejagt, oder? Dort ist mir nämlich aufgefallen, dass deine Input Methode das abschließende [enter] mit in den String reinpackt, der dann seinerseits nicht vom File Konstruktor verarbeitet werden kann. Du solltest also deinen datei String vorher noch von sonderzeichen entfernen, bzw. die \r und \n kicken.

Hier mal wie mir das aufgefallen ist:

[URL=http://img102.imageshack.us/my.php?image=filewriter7xx.jpg][IMG]http://img102.imageshack.us/img102/8360/filewriter7xx.th.jpg[/IMG][/URL]

viel Spass noch beim Hacken,

tele

edit hier wies funktioniert:

[PHP]
import java.io.*;

public class Stream {

public Stream() {
}
// Input-Methode
public String stringInput() {
StringBuffer temp = new StringBuffer();
InputStreamReader ir = new InputStreamReader(System.in);
try {
do {
temp.append((char) ir.read());
} while (ir.ready());
} catch (IOException e) {
}
return temp.toString();
}

public void dateiSchreiben(String datei, String inhalt) {

File fi = new File(datei);
try {
// Falls Datei existiert, lösche die Datei und erstelle Neue.
if (fi.exists()) {
fi.delete();
fi.createNewFile();
}
// Inhalt in Date schreiben.
FileWriter fw = new FileWriter(fi);
fw.write(inhalt);
fw.close();
} catch (IOException e) {
}
}

public static void main(String args[]) {
String datei; // Dateiname
String inhalt; // Inhalt der Datei

Stream se = new Stream();

System.out.println("Dateiname im Format xyz.txt eingeben: ");
datei = se.stringInput();
System.out.println(datei); // Nur zur Überwachung
System.out.println("Inhalt der Datei eingeben: ");
inhalt = se.stringInput();
System.out.println(inhalt); // Nur zur Überwachung
// entfernt die letzten beiden Charackters \r\n
datei = datei.substring(0, datei.length()-2);
se.dateiSchreiben(datei, inhalt);
}
}
[/PHP]

redfalcon 25.02.2006 16:10

AW: [Java] Problem mit FileWriter
 
[QUOTE=tele]
Dort ist mir nämlich aufgefallen, dass deine Input Methode das abschließende [enter] mit in den String reinpackt, der dann seinerseits nicht vom File Konstruktor verarbeitet werden kann. Du solltest also deinen datei String vorher noch von sonderzeichen entfernen, bzw. die \r und \n kicken.
[/QUOTE]

Find ich aber seltsam. Ich hatte nämlich mit datei.length noch nachgesehen, ob nicht doch noch was hintendran gehängt wird; und da konnte man nix von der Newline sehen. Oder werden Escape-Seqenze da nicht mitgezählt? Danke anyway, deine Lösung gefällt mir besser.

tele 26.02.2006 10:45

AW: [Java] Problem mit FileWriter
 
Mir sind grad nochn paar Gedanken zu deinem Problem gekommen:

1. meine Lösung funktioniert nur unter Windows - wenn du es also richtig machen willst, würde ich dir nahelegen, schon in der Input Methode den abschließenden Zeilenumbruch (also \n\r unter windows und \r unter unix-like) abzufangen, da es ja nicht Aufgabe der anderen Methode ist.

2. mich wundert grade, dass das überhaupt nötig ist, da du ja
[php]if(i != 10 && i != 13)[/php] drin stehen hast - debug mal drüber inwiefern das sinnvoll ist

Gruß

tele


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:38 Uhr.

Powered by vBulletin® Version 3.8.10 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
SEO by vBSEO 3.5.2 ©2010, Crawlability, Inc.