Конец строки, FileWriter \n

Я пытаюсь добавить новую строку в уже существующий файл, но все команды, которые я пробовал, привели просто к первой строке. Я хочу, чтобы вывод в файле был похож

ROW1

ROW2

 private void addToFavToFile(String site){
        BufferedWriter writer = null;
        File root = Environment.getExternalStorageDirectory();
        try{
            writer = new BufferedWriter(new FileWriter(Environment.getExternalStorageDirectory()+"/test2.txt",true));
            writer.write("ROW1");
            writer.newLine();
            writer.write("ROW2");
            writer.close();
        }catch(Exception e){

        }

Как мне это решить?

7 ответов

Я попробовал следующий код, и он, кажется, производит то, что вы после.

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class TestNewLines {

public static void main(String[] args) {
    TestNewLines testFiles = new TestNewLines();
    testFiles.addToFavToFile("");
}

private void addToFavToFile(String site){
    BufferedWriter writer = null;
    try{
        writer = new BufferedWriter(new FileWriter("test.txt",true));
        insertEmptyLine(writer);
        writer.write("ROW1: " + System.currentTimeMillis());
        insertEmptyLine(writer);
        writer.write("ROW2: " + System.currentTimeMillis());
        insertSeperator(writer);
        writer.close();
    } catch(Exception e){

    }
}

private void insertEmptyLine(BufferedWriter writer) throws IOException {
    writer.newLine();
    writer.newLine();
}

private void insertSeperator(BufferedWriter writer) throws IOException {
    writer.newLine();
    writer.write("********************");
}
}

Чтобы проверить это, я поставил строку "Это первая строка". в начале моего тестового файла. После запуска несколько раз, результат будет выглядеть так:

Это первая строка.

ROW1: 1335189657127

ROW2: 1335189657127


ROW1: 1335189658390

ROW2: 1335189658390


ROW1: 1335189665738

ROW2: 1335189665738


ROW1: 1335189679638

ROW2: 1335189679638


Как видно из отметок времени, я добавляю новые строки в конец файла каждый раз.

Вместо добавления одной новой строки, попробуйте добавить две строки в строке.

Один для перехода на строку ниже ROW1, а другой для вставки еще одной пустой строки.

Если вы просто хотите окончательный перевод строки, добавьте writer.newLine() после writer.write("Row2"), Если не пишется newLine, writer.newLine() может записать неверный маркер конца строки в файл. Напишите это от руки.

Почему бы вам не заставить его написать в конце файла, включив offset в командах записи...

private void addToFavToFile(String site){
    BufferedWriter writer = null;
    File root = Environment.getExternalStorageDirectory();
    try{
        File fileToWrite = new File(Environment.getExternalStorageDirectory()+"/test2.txt");
        int endOfFile = (int)file.length();

        writer = new BufferedWriter(new FileWriter(fileToWrite,true));

        String string1 = "ROW1";
        writer.write(File.separator + string1,endOfFile,string1.length);
        endOfFile += string1.length;

        String string2 = "ROW2";
        writer.write(File.separator + string2,endOfFile,string2.length);
        endOfFile += string2.length;

        writer.close();
    }catch(Exception e){

    }

Пожалуйста, используйте следующий код,

private void addToFavToFile(String site){
    BufferedWriter writer = null;
    File root = Environment.getExternalStorageDirectory();
    try{
        writer = new BufferedWriter(new FileWriter(Environment.getExternalStorageDirectory()+"/test2.txt",true));
        writer.write("ROW1");
        writer.newLine();
        writer.write("ROW2");
        writer.newLine();
        writer.close();
    }catch(Exception e){

    }

Вместо того, чтобы использовать writer.newLine();

Вы должны использовать writer.write("\\n\\r");

Вы также можете попробовать использовать PrintWriter.println(String s)

http://docs.oracle.com/javase/6/docs/api/java/io/PrintWriter.html

Другие вопросы по тегам