31

新しい行を含む文字列があります。この文字列を関数に送信して、次のように文字列をテキスト ファイルに書き込みます。

    public static void writeResult(String writeFileName, String text)
    {
        try
        {
        FileWriter fileWriter = new FileWriter(writeFileName);
        BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);

        bufferedWriter.write(text);

        // Always close files.
        bufferedWriter.close();

        }
        catch(IOException ex) {
            System.out.println("Error writing to file '"+ writeFileName + "'");}
    } //end writeResult function

しかし、ファイルを開くと、改行がないことがわかります。コンソール画面にテキストを表示すると、改行されて表示されます。テキストファイルに改行文字を書き込むにはどうすればよいですか。

編集:textこれが上記の関数に送信し た引数であると仮定します:

I returned from the city about three o'clock on that
may afternoon pretty well disgusted with life.
I had been three months in the old country, and was

この文字列をそのまま(改行して)テキストファイルに書き込む方法。私の関数は、文字列を 1 行で書き込みます。改行を含むテキストをファイルに書き込む方法を教えてください。

編集 2: テキストはもともと .txt ファイルにあります。私は以下を使用してテキストを読みました:

while((line = bufferedReader.readLine()) != null)
{
sb.append(line); //append the lines to the string
sb.append('\n'); //append new line
} //end while

sbStringBuffer はどこにありますか

4

9 に答える 9

39

編集2で:

while((line = bufferedReader.readLine()) != null)
{
  sb.append(line); //append the lines to the string
  sb.append('\n'); //append new line
} //end while

テキストファイルを読んでいて、それに改行を追加しています。改行を追加しないでください。メモ帳などの単純な Windows エディターでは改行が表示されません。代わりに、次を使用して OS 固有の行区切り文字列を追加します。

sb.append(System.lineSeparator()); ( Java 1.7 および 1.8 の場合) または sb.append(System.getProperty("line.separator"));( Java 1.6 以下)

または、後でStringBuffer に組み込まれた文字列を OS 固有の改行文字String.replaceAll()に置き換えるために使用できます。"\n"

String updatedText = text.replaceAll("\n", System.lineSeparator())

'\n'ただし、後で追加して置き換えるよりも、文字列を作成しているときに追加する方が効率的です。

最後に、開発者として、ファイルの表示または編集にメモ帳を使用している場合は、メモ帳を削除する必要があります。これは、Notepad++やお気に入りの Java IDE などのはるかに優れたツールがあるためです。

于 2013-09-29T23:27:54.647 に答える
19

BufferedWriter クラスはnewLine()メソッドを提供します。これを使用すると、プラットフォームの独立性が保証されます。

于 2013-09-29T23:15:45.943 に答える
6

bufferedWriter.write(text + "\n");この方法は機能しますが、プラットフォームによって改行文字が異なる可能性があるため、代わりに次の方法を使用できます。

bufferedWriter.write(text);
bufferedWriter.newline();
于 2013-09-29T23:14:31.273 に答える
3

文字列を文字列配列に分割し、上記の方法を使用して書き込みます (テキストに \n が含まれていると仮定して改行します)

String[] test = test.split("\n");

そしてループの内側

bufferedWriter.write(test[i]);
bufferedWriter.newline();
于 2014-01-17T07:14:19.973 に答える
0

現在のプラットフォームのデフォルトの改行文字を取得するスニペットを次に示します。使用 System.getProperty("os.name")System.getProperty("os.version"). 例:

public static String getSystemNewline(){
    String eol = null;
    String os = System.getProperty("os.name").toLowerCase();
    if(os.contains("mac"){
        int v = Integer.parseInt(System.getProperty("os.version"));
        eol = (v <= 9 ? "\r" : "\n");
    }
    if(os.contains("nix"))
        eol = "\n";
    if(os.contains("win"))
        eol = "\r\n";

    return eol;
}

eol は改行です

于 2014-06-15T22:32:56.580 に答える