# FileWriter - in neue Zeile schreiben!?



## s87 (14. Apr 2010)

Hi,

irgendwie hat mich das java-Fieber gepackt. Nur stoße ich ständig auf neue Probleme. Aber ich bin halt einfach noch am Anfang meiner "Karriere" 

So also mein neues Problem sieht wie folgt aus:


```
try
        {
        FileWriter fw = new FileWriter(kname+".txt" );
          fw.write("Gerätedaten: \t"+dev);
          fw.write("Seriennummer: \t"+gsn);
          fw.write("Zubehör: \t"+gzub);
          fw.write("Benutzername: \t"+loginname);
          fw.write("Passwort: \t"+kpw);
        fw.close();
        }
          catch ( IOException e ) 
        {
          System.out.println( "Datei konnte nicht erstellt werden!" );
        }
```

Ich hab den Code nicht selbst geschrieben und verstehe wenn ich ganz ehrlich bin auch nicht alles was dort steht, kann es mir allerdings so halbwegs erklären was wohl ungefähr wo passiert...

Mein Problem ist jetzt einfach das, dass es in der erzeugten Textdatei den Text einfach hintereinander schreibt und nicht wie von mir gewünscht jeden fw.write() in eine neue Zeile.

Was in dem Zusammenhang vllt auch noch eine recht nützliche Information wäre, ist die da ich gestern den DRUCK-VERSUCH abgebrochen habe, wie ich die dort erzeugte Datei direkt öffnen kann?

Danke schonmal...

Cheers


----------



## Noctarius (14. Apr 2010)

Versuch mal \n als Escapecode (genau wie \t für Tab)


----------



## s87 (14. Apr 2010)

also das funktioniert nicht, auch das mit 

fw.append('\n'); oder fw.newLine(); geht nicht...


----------



## Irreparabel (14. Apr 2010)

```
try
        {
        FileWriter fw = new FileWriter(kname+".txt" );
          fw.write("Gerätedaten: \t"+dev+"\n");
          fw.write("Seriennummer: \t"+gsn+"\n");
          fw.write("Zubehör: \t"+gzub+"\n");
          fw.write("Benutzername: \t"+loginname+"\n");
          fw.write("Passwort: \t"+kpw);
        fw.close();
        }
          catch ( IOException e ) 
        {
          System.out.println( "Datei konnte nicht erstellt werden!" );
        }
```


----------



## SlaterB (14. Apr 2010)

s87 hat gesagt.:


> also das funktioniert nicht, auch das mit
> 
> fw.append('\n'); oder fw.newLine(); geht nicht...


wie kommst du denn auf append() oder char statt String?
newLine() ginge bei einem BufferedWriter, was generell zu empfehlen ist


----------



## s87 (14. Apr 2010)

okay mein erstes Problem hab ich jetzt gegen meine Erwartungen gelöst aber das öffnen der Datei stelt mich immer noch vor ein Rätsel... 


L Ö S U N G :

```
fw.write("Gerätedaten: \t"+dev+"\r\n");
```


----------



## s87 (14. Apr 2010)

SlaterB hat gesagt.:


> wie kommst du denn auf append() oder char statt String?
> newLine() ginge bei einem BufferedWriter, was generell zu empfehlen ist



ich sagte doch bereits das ich mehr durchboxe als das ich großes Know-How habe... Ich hoffe das komt durch viel probieren und testen... 

also mein erstes Problem wäre gelöst... nur das zweite fehlt noch


----------



## Gast2 (14. Apr 2010)

Deine "L Ö S U N G" hat allerdings rein gar nichts mit Java an für sich zu tun, sondern eher damit wie die TextEditoren die du verwendest einen Zeilenumbruch interpretieren. Das gute alte notepad unter Windows besteht leider immer noch auch \r\n (CRLF), alle moderneren Editoren sollten eigentlich einen guten UNIX Style \n verstehen.


Textdateien lesen:
Hier findest du alles was du brauchst: Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 14 Dateien und Datenströme


----------



## s87 (14. Apr 2010)

wie du bereits sagtest "meine" Lösung!


----------



## Wortraum (14. Apr 2010)

Noch etwas zu Deinem Zeilenumbruch. Es gibt drei verschiedene Möglichkeiten für einen Zeilenumbruch, abhängig vom Betriebssystem:

Windows: \r\n
Unix und Mac OS X: \n
Mac OS bis Version 9: \r
IBM mit seinem EBCDIC hat auch noch einen, aber das kann man wohl vernachlässigen.

Überträgt man eine Datei zwischen verschiedenen Betriebssystemen, muß man den Zeilenumbruch entweder konvertieren oder sich auf einen einigen, meist auf den von Unix. Speichert man eine Datei nur lokal, kann man den unter dem Betriebssystem gebräuchlichen verwenden. Doch woher weiß man, welcher das ist? Über die Eigenschaft „line.separator“ kann man den Zeilenumbruch abfragen:

```
String newline = System.getProperty("line.separator");
```

Deine zweite Frage verstehe ich nicht.


----------



## s87 (14. Apr 2010)

okay danke für die Info, hab es wie oben gelöst.

mit meiner zweiten frage wollte ich wissen, wie man die datei die ich erstellt habe, direkt auch öffnen kann. also wie in dem fall direkt der editor mit der txt. datei öffnet damit ich mir das mit dem druckdialog sparen kann, weil ich es nicht verstehe wie das geht mit dem direkten drucken. 

aber es hat sich grad noch ne frage aufgetan, und zwar wie lässt sich eine ausführbare datei erstellen, habe es so gemacht wie hier im forum beschrieben aber es geht einfach nicht...

im netbeans steht das:

init:
Deleting: C:\Users\grid\Documents\NetBeansProjects\GridRep\build\built-jar.properties
deps-jar:
Updating property file: C:\Users\grid\Documents\NetBeansProjects\GridRep\build\built-jar.properties
compile:
Copy libraries to C:\Users\grid\Documents\NetBeansProjects\GridRep\dist\lib.
To run this application from the command line without Ant, try:
java -jar "C:\Users\grid\Documents\NetBeansProjects\GridRep\dist\GridRep.jar"
jar:
BUILD SUCCESSFUL (total time: 0 seconds)

????????????????????????????????????????????????HILFE 

EDIT: (zu meiner zweiten frage bzgl. datei/anwendung öffnen)

habe versucht es so zu lösen:

```
datei= kname+"_"+rand+ ".txt";
        try {
        Runtime.getRuntime().exec(datei);
        }
        catch (Exception e) {
         System.err.println(e.toString());
        }
```

bekomme den Fehler: java.io.IOException: Cannot run program "dfg_457410950.txt": CreateProcess error=193, %1 ist keine zulässige Win32-Anwendung

den versteh ich denke auch, es gibt eben einfach kein Programm das so heisst, aber wie kann ich dann die .txt-Datei öffnen die ich zuvor erstellt habe?


----------



## Wortraum (14. Apr 2010)

Die Datei kannst Du über die Klasse Desktop öffnen.

```
Desktop.getDesktop().open(txtFile);
```

Das funktioniert natürlich nur, wenn im Betriebssystem oder der Arbeitsoberfläche eine Assoziation der Endung .txt mit einem Editor gibt. Es passiert also nichts anders als auch passiert, wenn man im Windows‐Explorer auf eine Textdatei doppelt klickt.

Wie man mit Netbeans am einfachsten eine Jar-Datei erzeugt, kann ich Dir leider nicht sagen. Gibt es kein Kontextmenü mit einem Punkt „Build Jar-File“ oder so ähnlich, wenn Du auf ein Projekt oder ein Paket klickst? Dort müßtest Du nur darauf achten, daß Du die Klasse mit der main‐Methode angibst, da damit das Programm startet.


----------



## s87 (14. Apr 2010)

super danke nur leider funktioniert es (noch) nicht,... ich kann dort aus meinem code die variable "datei" nicht einsetzten da kommt dann ein fehler...


----------



## Wortraum (14. Apr 2010)

„Kommt ein Fehler“ ist nicht gerade eine exakte Fehlerbeschreibung. 

Wenn Du in die API-Dokumentation schaust – die wurde von mir verlinkt –, dann siehst Du, daß open() als Parameter den Typ _File _verlangt; Deine Variable datei ist aber wohl ein _String_. Daß es der falsche Typ ist, sollte Dir auch die Fehlermeldung verraten.

Du kannst aus einem String mit dem Dateipfad aber einfach ein Objekt File erstellen.

```
String dateiPfad = kname+"_"+rand+ ".txt";
File txtDatei = new File(dateiPfad);
Desktop.getDesktop().open(txtDatei);
```
Oder einfach so:

```
Desktop.getDesktop().open(new File(dateiPfad));
```


----------



## s87 (14. Apr 2010)

geht nicht ;-(;-(;-(;-(;-(;-(;-(

diesesmal mit Fehler:

Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: Uncompilable source code - unreported exception java.io.IOException; must be caught or declared to be thrown
        at gridrep.GridRepView.applyActionPerformed(GridRepView.java:686)
        at gridrep.GridRepView.access$900(GridRepView.java:27)
        at gridrep.GridRepView$5.actionPerformed(GridRepView.java:268)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6263)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6028)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)


bissl hart für einen der 2 woche java macht xD


----------



## Wortraum (14. Apr 2010)

Die Fehlermeldung fällt in die Kategorie „lange Rede, kurzer Sinn“. open() kann eine Ausnahme IOException werfen, die Du aber nirgends auffängst.
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 8 Exceptions

Das gleiche hast Du bei exec(), wo Du aber schon einen try-catch-Block drumherum hast und einfach alles auffängst, was geworfen wird (Exception).


----------



## s87 (14. Apr 2010)

*WAAAAAAAAAAAAAAAAAAAH!!!! sehr geil!*


vielen vielen danke! 

wie lange muss man programmieren um das so zu verstehen wie du? oder machst du das beruflich? bei mir ist das eher so ne just 4 fun aktion


----------



## Gast2 (14. Apr 2010)

s87 hat gesagt.:


> wie lange muss man programmieren um das so zu verstehen wie du? oder machst du das beruflich? bei mir ist das eher so ne just 4 fun aktion



Das sind eigentlich Grundlagen. Die sollte man recht fix beherrschen. Jede moderne IDE (z.B. netbeans, eclipse, etc) zeigen solche Fehler auch direkt an und bieten meistens auch gleich einen Quickfix wie automatisch einen try-catch Block um das kritische Statement zu bauen. 

Wenn du etwas sortiert and die ganze Sache (Java lernen) gehst anstatt auf learning by try-n-error zu setzen bekommt man sowas schnell mit. Du solltest mal gucken ob du nicht zumindest mal die ersten paar Kapitel von der Javainsel durchblätterst, z.B. sowas wie primitive Datentypen, Konstruktoren, Exceptions, casting, Stringvergleiche usw sind Grundlagen die man schnell lernen kann aber wenn man es auslässt oftmals mit voller Fahrt vor die Wand läuft.


----------



## s87 (14. Apr 2010)

hehe, ich werd mich dran halten... 

RapidShare: 1-CLICK Web hosting - Easy Filehosting

ich habs mal hochgeladen und wer möchte darfs gern mal runterladen und mir sagen was besser zu machen wäre...

einige dinge sind noch nicht abgefangen wir das anklicken zweier checkboxen die sich logisch wider sprechen und das techniker feld oben ist im moment auch noch nicht in die txt_File eingebaut und es wird nocht nicht geprüft ob auch tatsächlich was drinnensteht in den feldern aber kommt noch  

das mit dem print-button geht auch noch nicht aber das is auch echt schwer 

danke euch, super forum! 

EDIT:
geht nicht mit der .jar Datei könnter also auch gleich lasse ^^

<-------------- NOOB!


----------



## Wortraum (14. Apr 2010)

s87 hat gesagt.:


> wie lange muss man programmieren um das so zu verstehen wie du? oder machst du das beruflich? bei mir ist das eher so ne just 4 fun aktion


Das sind Grundlagen, in die man so langsam reinkommt. Da Ausnahmen überall vorkommen, lernt man automatisch etwas über sie – Du hast ja auch gerade etwas dazugelernt. Es kann aber nicht schaden, sich das etwas näher anschauen, wie fassy schon gesagt hat. Je besser man etwas versteht, desto besser kann man natürlich damit umgehen und Fehler finden.


----------

