2009-08-12 6 views
0

テキストファイルに書き込むたびに、元のデータが失われます。ファイルを読み込んで空の行または空の次の行にデータを入力するにはどうすればよいですか?問題を書く - 元のデータを失う

public void writeToFile() 
{ 

    try 
    { 
     output = new Formatter(myFile); 
    } 
    catch(SecurityException securityException) 
    { 
     System.err.println("Error creating file"); 
     System.exit(1); 
    } 
    catch(FileNotFoundException fileNotFoundException) 
    { 
     System.err.println("Error creating file"); 
     System.exit(1); 
    } 

    Scanner scanner = new Scanner (System.in); 

    String number = ""; 
    String name = ""; 

    System.out.println("Please enter number:"); 
    number = scanner.next(); 

    System.out.println("Please enter name:"); 
    name = scanner.next(); 

    output.format("%s,%s \r\n", number, name); 
    output.close(); 

} 

答えて

1

追加モードでmyFileを開く必要があります。例については、this linkを参照してください。

0

new Formatter(myFile);あなたはnew Formatter(new FileWriter(myfile, true)を使用します。 trueは、そのファイルに追加することを示します。

1

他の人も述べたように、appendオプションを使用してください。

このコードは、デフォルトプラットフォームのエンコーディングにデータを書き込むことができます。

private static void appendToFile() throws IOException { 
    boolean append = true; 
    OutputStream out = new FileOutputStream("TextAppend.txt", append); 
    Closeable resource = out; 
    try { 
     PrintWriter pw = new PrintWriter(out); 
     resource = pw; 
     pw.format("%s,%s %n", "foo", "bar"); 
    } finally { 
     resource.close(); 
    } 
    } 

あなたは同じ効果を達成するためにOutputStream周りをラップすることができますクラスの数があります。上記の方法は、Unicodeのデフォルトエンコーディング(Windowsなど)を使用せず、異なるPCで異なる出力を生成する可能性があるプラットフォームでコードを実行する場合にはlose dataになることに注意してください。

エンコードがbyte order markを挿入する場合、注意が必要なケースが1つあります。リトルエンディアンのBOMでマークされたUTF-16にロスレスのUnicodeテキストを書きたい場合は、そのファイルで既存のデータをチェックする必要があります。

private static void appendUtf16ToFile() throws IOException { 
    File file = new File("TextAppend_utf16le.txt"); 
    String encoding = (file.isFile() && file.length() > 0) ? 
     "UnicodeLittleUnmarked" : "UnicodeLittle"; 
    boolean append = true; 
    OutputStream out = new FileOutputStream(file, append); 
    Closeable resource = out; 
    try { 
    Writer writer = new OutputStreamWriter(out, encoding); 
    resource = writer; 
    PrintWriter pw = new PrintWriter(writer); 
    resource = pw; 
    pw.format("%s,%s %n", "foo", "bar"); 
    } finally { 
    resource.close(); 
    } 
} 

サポートされているエンコーディング:

関連する問題