[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] |
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] |
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. |
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.