1

この単純なプログラムをWindows7で実行してからAIX(Unixシステム)で実行し、WinmergeやCompare Itなどのツールを使用して生成された2つのファイルを比較すると、キャリッジリターンとラインフィードは異なりますが、内容は同じであることがわかります。

  • 何故ですか?この場合、両方が同じエンコーディング「UTF-8」を使用する場合、同じであるとは限りませんか?

  • どうすれば両方のファイルを完全に等しくすることができますか?

public class WriteFile {

    public static void main(String[] args) throws IOException {
        write();

    }

    public static void write() throws IOException {
        File file = new File("/tmp/test.txt");
        file.delete();
        file.createNewFile();
        String str = "hello";
        FileOutputStream fileOs = new FileOutputStream(file);
        PrintWriter writer = new PrintWriter(new OutputStreamWriter(fileOs, "UTF-8"), true);
        writer.println(str);
        writer.close();
    }

}
4

3 に答える 3

5

オペレーティングシステムが異なれば、改行規則も異なります。

  • Windowsでは、改行はCR+LF;
  • Unixでは、改行はLFです。

(興味があれば、もっとあります。)

出力ファイルを同一にする必要がある場合は、を使用せずにprintln()、次のように記述してください。\n\r\n

writer.printf("%s\n", str);   // LF
writer.printf("%s\r\n", str); // CR+LF
于 2011-10-13T15:47:50.510 に答える
3

使用する

writer.print(str + "\n");

それ以外の

writer.println(str);
于 2011-10-13T15:47:47.077 に答える
1

言われているように、println(String)からprint(String)またはprintf(String、...)に切り替える必要があります

println(String)(emphasis mine)のドキュメントを確認してください。

文字列を出力してから、行を終了します。このメソッドは、print(String)を呼び出してからprintln()を呼び出すかのように動作します。

そしてprintln()のドキュメント:

行区切り文字列を書き込むことにより、現在の行を終了します。行区切り文字列は、システムプロパティline.separatorによって定義され、必ずしも単一の改行文字('\ n')である必要はありません。

ここline.separatorでシステムプロパティについて読むことができます。

私はaixの使用の提案に行きます

writer.printf("%s\n", str);
于 2011-10-13T16:12:53.403 に答える