如何将文本追加到Java中的现有文件
我需要将文本反复附加到Java中的现有文件。 我怎么做?
你是否为了记录的目的而这样做? 如果是这样的话,有几个库。 其中两种最受欢迎的是Log4j和Logback。
Java 7+
如果你只需要这样做一次,Files类可以简化这个过程:
try {
Files.write(Paths.get("myfile.txt"), "the text".getBytes(), StandardOpenOption.APPEND);
}catch (IOException e) {
//exception handling left as an exercise for the reader
}
小心 :如果文件不存在,上述方法将抛出NoSuchFileException
。 它也不会自动附加一个换行符(当您追加到文本文件时,您通常会想要换行符)。 史蒂夫钱伯斯的答案涵盖了如何使用Files
类来完成此任务。
但是,如果您要多次写入同一个文件,上面必须多次打开和关闭磁盘上的文件,这是一个缓慢的操作。 在这种情况下,缓冲作者比较好:
try(FileWriter fw = new FileWriter("myfile.txt", true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw))
{
out.println("the text");
//more code
out.println("more text");
//more code
} catch (IOException e) {
//exception handling left as an exercise for the reader
}
笔记:
FileWriter
构造函数的第二个参数将告诉它附加到文件,而不是写入新文件。 (如果文件不存在,它将被创建。) FileWriter
),建议使用BufferedWriter
。 PrintWriter
可以访问您可能从System.out
使用的println
语法。 BufferedWriter
和PrintWriter
包装并不是绝对必要的。 老Java
try {
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("myfile.txt", true)));
out.println("the text");
out.close();
} catch (IOException e) {
//exception handling left as an exercise for the reader
}
异常处理
如果您需要针对较旧Java的强大异常处理,它会变得非常冗长:
FileWriter fw = null;
BufferedWriter bw = null;
PrintWriter out = null;
try {
fw = new FileWriter("myfile.txt", true);
bw = new BufferedWriter(fw);
out = new PrintWriter(bw);
out.println("the text");
out.close();
} catch (IOException e) {
//exception handling left as an exercise for the reader
}
finally {
try {
if(out != null)
out.close();
} catch (IOException e) {
//exception handling left as an exercise for the reader
}
try {
if(bw != null)
bw.close();
} catch (IOException e) {
//exception handling left as an exercise for the reader
}
try {
if(fw != null)
fw.close();
} catch (IOException e) {
//exception handling left as an exercise for the reader
}
}
您可以使用fileWriter
将标志设置为true
来进行追加。
try
{
String filename= "MyFile.txt";
FileWriter fw = new FileWriter(filename,true); //the true will append the new data
fw.write("add a linen");//appends the string to the file
fw.close();
}
catch(IOException ioe)
{
System.err.println("IOException: " + ioe.getMessage());
}
不应该所有的try / catch块的答案都包含在finally块中的.close()块?
标记答案示例:
PrintWriter out = null;
try {
out = new PrintWriter(new BufferedWriter(new FileWriter("writePath", true)));
out.println("the text");
}catch (IOException e) {
System.err.println(e);
}finally{
if(out != null){
out.close();
}
}
另外,从Java 7开始,您可以使用try-with-resources语句。 关闭声明的资源不需要finally块,因为它是自动处理的,并且也不那么冗长:
try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("writePath", true)))) {
out.println("the text");
}catch (IOException e) {
System.err.println(e);
}
链接地址: http://www.djcxy.com/p/44051.html