1

多くの文字列を置き換えて結果を出力し、それらの行をテキストファイルに書き込もうとしています。これが私がしたことです。新しいファイルを作成しました:

File newfile = new File("/Users/Bill/Desktop/newfile.txt");
    if (newfile.exists()) {
        System.out.println("File exists");
    } else {
        newfile.createNewFile();
        System.out.println("New file created");

    }

次に、作成したファイルにSystem.out.println(lines [i]);の結果を書き込もうとしました。

    try {
    WriteToFile newFile = new WriteToFile(newfile, true);
    newFile.write(lines[i]); 
    // lines[i] is what I used to print out System.out.println(lines[i])  
    }

    catch (IOException e) {
        System.out.println("Error.");
    }

しかし、私は期待しているものを手に入れていません。助言がありますか?

WRITETOFILE:

public class WriteToFile {
private String path;
private boolean append = false;

public WriteToFile(String filename) {
    path=filename;
}

public WriteToFile(String filename, boolean appendfile){
    path=filename;
    append=appendfile;
}

public void write(String text) throws IOException {
    FileWriter filewrite = new FileWriter(path, append);
    PrintWriter print = new PrintWriter(filewrite);

    print.printf("%s" + "%n", text);
    print.close();
}
}
4

3 に答える 3

2

を呼び出すたびWriteToFile.writeに、書き込み用にファイルが再度開かれ、ファイルの元の内容が切り捨てられます。コンストラクターでファイルを 1 回開き (そして をフィールドに格納) 、. を呼び出すメソッドをPrintWriter追加する必要があります。closeclosePrintWriter

呼び出し側で、次のようにします。

WriteToFile writer = new WriteToFile(filename);
try {
    // writer.write(...);
} finally {
    writer.close();
}

close呼び出しをブロックfinallyにすることで、例外によって関数が早期に終了した場合でも、ファイルが確実に閉じられます。

于 2011-05-23T02:38:43.660 に答える
0

メソッドSystem.setOut(fileName);を使用して System に fileName を設定するだけ です。

次に、 System.out.println() を使用して印刷するときはいつでも、言及した fileName に直接印刷します。

于 2013-07-10T11:15:19.080 に答える
0

FileWriterコード内のコンストラクターの 2 番目の引数を見てください。

FileWriter filewrite = new FileWriter(path, append);

ほら、「追加」と書かれています。それが何をするかを推測してください。よくわからない場合は、ドキュメントをお読みください。

次に、どのように初期化したかを見てくださいappend

private boolean append = false;

このコードは完全に期待どおりに動作しています。それはただの開発者のせいです。修理する :)

于 2011-05-23T02:56:28.180 に答える