2016-11-14 1 views
1

Okay, ich habe ein sehr kleines Programm, an dem ich arbeite, um den Inhalt einer Textdatei zu testen. txt, und lege sie in eine andere leere Datei testCopied.txt. Der Trick ist, dass ich Scanner und printWriter verwenden möchte, während ich versuche, diese ein bisschen besser zu verstehen.Java IO: Mit Scanner und printWriter den Inhalt einer Textdatei kopieren und in eine andere Textdatei einfügen

Hier ist, was mein Code wie folgt aussieht:

import java.io.*; 
import java.util.*; 

public class CopyA 
{ 
    public static void main(String [] args) 
    { 
     String Input_filename = args[0]; 
     String Output_filename = args[1]; 
     char r = args[2].charAt(0); 

     try 
     { 
     Scanner sc = new Scanner(new File(Input_filename)); 
     FileWriter fw = new FileWriter(Output_filename); 
     PrintWriter printer = new PrintWriter(fw); 

     while(sc.hasNextLine()) 
     { 
      String s = sc.nextLine(); 
      printer.write(s); 
     } 
     sc.close();    
     } 
     catch(IOException ioe) 
     { 
     System.out.println(ioe); 
     } 
    } 
} 

Dies kompiliert, aber wenn ich an testCopied.txt aussehen es ist immer noch leer, und hat nicht test.txt Inhalt übertragen hatte. Was mache ich falsch? Java IO ist ziemlich verwirrend für mich, also versuche ich es besser zu verstehen. Jede Hilfe wird wirklich geschätzt!

+0

Schließen Sie Ihren 'PrintWriter', wenn Sie damit fertig sind, vorzugsweise in einem' finally' Block. Dies bewirkt, dass der Schreiber seinen Inhalt löscht und alles in die Datei schreibt. Sie sollten auch jede Zeile beenden oder die neue Datei hat alles in einer Zeile. – Zircon

+0

@Zircon Wie beenden Sie jede Zeile? Ist es eine Form der while-Schleife, die hier verwendet wird, oder gibt es eine andere Java IO-spezifische Sache, die ich verwenden sollte? –

Antwort

1

Sie haben flush() verpassten und close() für das PrintWriter Objekt, das Sie brauchen

hinzuzufügen und dann die Zeilentrenn System.getProperty("line.separator") unter Verwendung zu verwenden, während jede Zeile in die zweite Datei zu schreiben.

Sie können den Code unten verweisen:

PrintWriter printer = null; 
Scanner sc = null; 
try 
    { 
    String lineSeparator = System.getProperty("line.separator"); 

    sc = new Scanner(new File(Input_filename)); 
    FileWriter fw = new FileWriter(Output_filename); 
    printer = new PrintWriter(fw); 

    while(sc.hasNextLine()) 
    { 
     String s = sc.nextLine()+lineSeparator; //Add line separator 
     printer.write(s); 
    } 
    } 
    catch(IOException ioe) 
    { 
    System.out.println(ioe); 
    } finally { 
    if(sc != null) { 
     sc.close(); 
    } 
    if(printer != null) { 
     printer.flush(); 
     printer.close(); 
    } 
} 

außerdem sicher, dass Sie immer Ressourcen im finally Block schließen (die Sie haben für Scanner-Objekt in Ihrem Code verpasst).

+0

Danke! Das hat funktioniert! Ich habe jedoch eine Frage. Der Inhalt in test.txt ist auf 5 verschiedene Zeilen verteilt. Wenn es in testCopied.txt kopiert wird, ist es nur eine lange Zeile. Gibt es eine Möglichkeit, den Code so zu bearbeiten, dass die Formatierung zwischen den beiden Dateien konstant bleibt? –

+0

Sie müssen lineSeparator hinzufügen, aktualisiert den Code, können Sie sich auf die Antwort beziehen – developer

+0

Vielen Dank! –

Verwandte Themen