2012-12-05 8 views
22

Der Code, den ich geschrieben habe, soll den Inhalt der ausgewählten Textdatei überschreiben, aber es hängt es an. Was mache ich genau falsch?Überschreiben von TXT-Datei in Java

File fnew=new File("../playlist/"+existingPlaylist.getText()+".txt"); 
String source = textArea.getText(); 
System.out.println(source); 
FileWriter f2; 

try { 
    f2 = new FileWriter(fnew,false); 
    f2.write(source); 
    /*for (int i=0; i<source.length();i++) 
    { 
     if(source.charAt(i)=='\n') 
      f2.append(System.getProperty("line.separator")); 
     f2.append(source.charAt(i)); 
    }*/ 
    f2.close(); 
} catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
}   

EDIT

Ich habe versucht, eine neue temp.txt Datei vornehmen und die neuen Inhalte in das Schreiben, diese Textdatei zu löschen und temp.txt auf diese eine Umbenennung. Die Sache ist, die Löschung ist immer erfolglos. Ich glaube nicht, dass ich die Benutzerrechte ändern muss, oder?

Auch ein Teil meines Programms listet alle Dateien in diesem Verzeichnis auf, also vermute ich, dass sie vom Programm verwendet werden und daher nicht gelöscht werden können. Aber warum nicht überschrieben?

GELöST

Mein größter "D'oh" Moment! Ich habe es auf Eclipse kompiliert und nicht auf cmd, wo ich es ausführte. Also gingen meine neu kompilierten Klassen in den bin-Ordner und die kompilierte Klassendatei über die Eingabeaufforderung blieb in meinem src-Ordner gleich. Ich habe mit meinem neuen Code neu kompiliert und es funktioniert wie ein Zauber.

File fold=new File("../playlist/"+existingPlaylist.getText()+".txt"); 
fold.delete(); 
File fnew=new File("../playlist/"+existingPlaylist.getText()+".txt"); 
String source = textArea.getText(); 
System.out.println(source); 

try { 
    FileWriter f2 = new FileWriter(fnew, false); 
    f2.write(source); 
    f2.close(); 
} catch (IOException e) { 
    e.printStackTrace(); 
}   
+2

Ich denke, es sollte funktionieren. Es funktioniert in meinem Fall. –

+0

Es funktioniert in meinem Fall auch. Vielleicht ist etwas Seltsames in Ihrem Programm passiert. Versuchen Sie, das Problem zu umgehen. Löschen Sie zuerst den gesamten Inhalt und beginnen Sie mit dem Schreiben neuer Inhalte in die gleiche Datei. – Smit

+1

Gibt es Hinweise, wie ich den Inhalt löschen kann? –

Antwort

3

GELöST

Mein größter "D'oh" Moment! Ich habe es auf Eclipse kompiliert und nicht auf cmd, wo ich es ausführte. Also gingen meine neu kompilierten Klassen in den bin-Ordner und die kompilierte Klassendatei über die Eingabeaufforderung blieb in meinem src-Ordner gleich. Ich habe mit meinem neuen Code neu kompiliert und es funktioniert wie ein Zauber.

   File fold=new File("../playlist/"+existingPlaylist.getText()+".txt"); 
      fold.delete(); 
      //File temp=new File("../playlist/temp.txt"); 
      File fnew=new File("../playlist/"+existingPlaylist.getText()+".txt"); 
      String source = textArea.getText(); 
      System.out.println(source); 
      /*FileWriter f2; 
      PrintWriter pw; 

      try { 
       f2 = new FileWriter(fnew,false); 
       pw= new PrintWriter(f2); 
       f2.write(source); 
       /*for (int i=0; i<source.length();i++) 
       { 
        if(source.charAt(i)=='\n') 
         f2.append(System.getProperty("line.separator")); 
        f2.append(source.charAt(i)); 
       }*/ 


      try { 
       FileWriter f2 = new FileWriter(fnew, false); 
      f2.write(source); 
       f2.close(); 
       //fnew.renameTo(fold); 
       //fold.renameTo(temp); 
       //temp.deleteOnExit(); 

      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
4

eine weitere Zeile hinzufügen nach

Datei Objekt initialisiert
File fnew=new File("../playlist/"+existingPlaylist.getText()+".txt"); 
fnew.createNewFile(); 
+1

'neue Datei' ist ausreichend um * Eine neue Datei zu erstellen * –

+0

Ich setze gerade den Pfad zu einer existierenden Datei. –

+5

@ALJIMohamed nein, 'neue Datei' erstellt nur das Java-Objekt, das ein abstraktes Konzept einer Datei darstellt. Andernfalls wäre es sinnlos, eine Methode 'exists()' zu verwenden, da die Datei nach 'new File' immer existiert. –

1

Dieses es ein wenig vereinfacht und es verhält sich wie Sie es wollen.

FileWriter f = new FileWriter("../playlist/"+existingPlaylist.getText()+".txt"); 

try { 
f.write(source); 
... 
} catch(...) { 
} finally { 
//close it here 
} 
+1

Es ist das Gleiche. Es hängt immer noch Text an –

18

Ihr Code funktioniert gut für mich. Er hat den Text in der Datei wie erwartet ersetzt und nicht angefügt.

Wenn Sie anhängen wollte, setzen Sie den zweiten Parameter in

new FileWriter(fnew,false); 

zu wahren;

0

Die einfachste Möglichkeit zum Überschreiben einer Textdatei ist die Verwendung eines öffentlichen statischen Feldes.

Dadurch wird die Datei jedes Mal überschrieben werden, weil Ihr nur für das Anfügen Feld des Schreibcode es falsch die ersten Mal through.`

public static boolean appendFile; 

können Sie nur einmal durch die Schreibsequenz ermöglichen falsch sein.

// use your field before processing the write code 

appendFile = False; 

File fnew=new File("../playlist/"+existingPlaylist.getText()+".txt"); 
String source = textArea.getText(); 
System.out.println(source); 
FileWriter f2; 

try { 
    //change this line to read this 

    // f2 = new FileWriter(fnew,false); 

    // to read this 
    f2 = new FileWriter(fnew,appendFile); // important part 
    f2.write(source); 

    // change field back to true so the rest of the new data will 
    // append to the new file. 

    appendFile = true; 

    f2.close(); 
} catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
}   
Verwandte Themen