Конец строки, 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