我想在不删除该文件的当前信息的情况下向现有文件添加新行。简而言之,这是我使用当前时间的方法:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.Writer;
Writer output;
output = new BufferedWriter(new FileWriter(my_file_name)); //clears file every time
output.append("New Line!");
output.close();
以上几行的问题只是他们正在删除我现有文件的所有内容,然后添加新的行文本。
我想在文件内容的末尾附加一些文字而不删除或替换任何内容。
答案 0 :(得分:114)
你必须以追加模式打开文件,这可以通过使用FileWriter(String fileName, boolean append)
构造函数来实现。
output = new BufferedWriter(new FileWriter(my_file_name, true));
应该做的伎俩
答案 1 :(得分:24)
使用FileWriter
的解决方案正在运行,但是您无法指定输出编码,在这种情况下,将使用机器的默认编码,这通常不是UTF-8!
最好使用FileOutputStream
:
Writer writer = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(file, true), "UTF-8"));
答案 2 :(得分:11)
尝试:“ \ r \ n ”
Java 7示例:
// append = true
try(PrintWriter output = new PrintWriter(new FileWriter("log.txt",true)))
{
output.printf("%s\r\n", "NEWLINE");
}
catch (Exception e) {}
答案 3 :(得分:10)
从 Java 7 开始:
在开头定义一个路径和包含行分隔符的String:
Path p = Paths.get("C:\\Users\\first.last\\test.txt");
String s = System.lineSeparator() + "New Line!";
然后您可以使用以下方法之一:
使用Files.write
(小文件):
try {
Files.write(p, s.getBytes(), StandardOpenOption.APPEND);
} catch (IOException e) {
System.err.println(e);
}
使用Files.newBufferedWriter
(文本文件):
try (BufferedWriter writer = Files.newBufferedWriter(p, StandardOpenOption.APPEND)) {
writer.write(s);
} catch (IOException ioe) {
System.err.format("IOException: %s%n", ioe);
}
使用Files.newOutputStream
(可与java.io
API互操作):
try (OutputStream out = new BufferedOutputStream(Files.newOutputStream(p, StandardOpenOption.APPEND))) {
out.write(s.getBytes());
} catch (IOException e) {
System.err.println(e);
}
使用Files.newByteChannel
(随机访问文件):
try (SeekableByteChannel sbc = Files.newByteChannel(p, StandardOpenOption.APPEND)) {
sbc.write(ByteBuffer.wrap(s.getBytes()));
} catch (IOException e) {
System.err.println(e);
}
使用FileChannel.open
(随机访问文件):
try (FileChannel sbc = FileChannel.open(p, StandardOpenOption.APPEND)) {
sbc.write(ByteBuffer.wrap(s.getBytes()));
} catch (IOException e) {
System.err.println(e);
}
有关这些方法的详细信息,请参阅Oracle's tutorial。
答案 4 :(得分:4)
如果您正在寻找创建和写入文件的剪切和粘贴方法,那么我写的只是一个字符串输入。删除' true'如果你想每次都覆盖文件,请来自PrintWriter。
private static final String newLine = System.getProperty("line.separator");
private synchronized void writeToFile(String msg) {
String fileName = "c:\\TEMP\\runOutput.txt";
PrintWriter printWriter = null;
File file = new File(fileName);
try {
if (!file.exists()) file.createNewFile();
printWriter = new PrintWriter(new FileOutputStream(fileName, true));
printWriter.write(newLine + msg);
} catch (IOException ioex) {
ioex.printStackTrace();
} finally {
if (printWriter != null) {
printWriter.flush();
printWriter.close();
}
}
}
答案 5 :(得分:3)
第2行将new FileWriter(my_file_name)
更改为new FileWriter(my_file_name, true)
,这样您就可以附加到文件而不是覆盖。
File f = new File("/path/of/the/file");
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(f, true));
bw.append(line);
bw.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
答案 6 :(得分:2)
如果要将数据附加到文件,可以使用FileWriter(String fileName, boolean append)
构造函数。
将您的代码更改为:
output = new BufferedWriter(new FileWriter(my_file_name, true));
来自FileWriter javadoc:
构造一个给定的FileWriter对象 文件名。如果第二个参数是 true ,然后写入字节 文件的结尾而不是 开始。