2016-11-14 11 views
1

申し訳ありませんが、私は非常に小さなプログラムを持っていますので、テキストファイルの内容をテストするように取り組んでいます。 txtを作成し、別の空のファイルtestCopied.txtに入れます。私がこれらをもっと良く理解しようとしているので、ScannerとprintWriterを使いたいというトリックです。ここでJava IO:テキストファイルの内容をコピーして別のテキストファイルに入れます。

は私のコードは次のようになります。

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); 
     } 
    } 
} 

これはコンパイルが、私はtestCopied.txtを見たとき、それはまだ白紙であり、それに転送test.txtというのコンテンツを持っていません。私は間違って何をしていますか? Java IOはかなり混乱しているので、私はそれをよりよく理解しようとしています。どんな助けも本当にありがとう!

+0

最後に 'finally'ブロックで' PrintWriter'を終了してください。これにより、ライターはその内容をフラッシュし、すべてをファイルに書き出します。また、各行を終了する必要があります。そうしないと、新しいファイルはすべて1行になります。 – Zircon

+0

@ Zirconどのように各行を終了しますか?ここで使用されるwhileループの形式ですか、別のJava IO固有のものが必要ですか? –

答えて

1

あなたは

を追加した後、第2のファイルにそれぞれの行を書きながらSystem.getProperty("line.separator")を使用して行区切りを使用する必要がPrintWriterオブジェクトに対して(flushを逃した)とclose()しています。あなたはいつも(あなたのコードのスキャナオブジェクトのために逃しています)finallyブロック内のリソースのクローズされていることを確認し、また

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(); 
    } 
} 

あなたは以下のコードを参照することができます。

+0

ありがとうございます!それはうまくいった!しかし、私は1つの質問があります。 test.txtの内容は5つの異なる行に分散されています。それがtestCopied.txtにコピーされるとき、それはちょうど1つの長い行です。フォーマットを2つのファイル間で一定に保つようにコードを編集する方法はありますか? –

+0

あなたはlineSeparatorを追加し、コードを更新する必要があります、あなたは上記の答えを参照することができます – developer

+0

ありがとうございます! –

関連する問題