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。它也不会自动追加到新一行(像你追加文件的时候经常干的那样)。另一个方法就是传入 CREATE和 APPEND两个参数,如果文件不存在的话就会先创建了。

private void write(final String s) throws IOException {Files.writeString(Path.of(System.getProperty("java.io.tmpdir"), "filename.txt"),s + System.lineSeparator(),CREATE, APPEND);
}

然鹅,如果你想写一个相同的文件多次,上面的代码就会多次打开和关闭磁盘上的文件,那是一个很慢的操作。这种情况下BufferedWriter更加快:

try(FileWriter fw = new FileWriter("myfile.txt", true);BufferedWriter bw = new BufferedWriter(fw);PrintWriter out = new PrintWriter(bw))
{out.println("the text");//more codeout.println("more text");//more code
} catch (IOException e) {//exception handling left as an exercise for the reader
}

Notes:
FileWriter 构造器的第二个参数就是决定是否追加文件,而不是重新写一个文件(如果文件不存在,那会被新建一个)。使用 BufferedWriter 是更为推荐的,比起代价昂贵的writer (例如 FileWriter)。用PrintWriter使得你可以使用 println 语法(可能经常在System.out中使用的)

但是BufferedWriter和PrintWriter包装器不是必须的
Older 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}
}

文章翻译自Stack Overflow:https://stackoverflow.com/questions/1625234/how-to-append-text-to-an-existing-file-in-java

Java中怎么把文本追加到已经存在的文件相关推荐

  1. Java中基于TCP通过socket嵌套字连接方式传送文件

    这里写目录标题 Java中通过socket连接传送文件 前言 socket嵌套字 发送方 接收方 总结 Java中通过socket连接传送文件 前言 在项目的开发中经常遇到需要传送文件的情况,有时候是 ...

  2. HTML中强制换行和自动换行,网页中的纯文本如何强制换行(txt文件)

    有的时候需要把文本文件中的内容显示到网页中,显示效果非常糟糕,比txt文本文件还差,不但没有行间距,连段落也没有了,所有段落被合并成一段,可阅读性变得十分差,可能阅读一会就不想读了.通常的处理方法是把 ...

  3. 如何在java中去除中文文本的停用词

    2019独角兽企业重金招聘Python工程师标准>>> 1.  整体思路 第一步:先将中文文本进行分词,这里使用的HanLP-汉语言处理包进行中文文本分词. 第二步:使用停用词表,去 ...

  4. 去停用词 java代码_如何在java中去除中文文本的停用词

    1.  整体思路 第一步:先将中文文本进行分词,这里使用的HanLP-汉语言处理包进行中文文本分词. 第二步:使用停用词表,去除分好的词中的停用词. 2.  中文文本分词环境配置 使用的HanLP-汉 ...

  5. JAVA中怎么设置文本域位置_java – 如何在JTextArea中更改文本的位置

    通常,在JTextArea中,文本从左上角开始.我希望它在左下角.你怎么能这样做? (如果我的笔迹不可读,请道歉) 解决方法: 您可以将JTextArea锚定到容器的BorderLayout.PAGE ...

  6. java中如何定位文本框_div定位在文本框下

    模板名称: 计费方式: 数量金额 模板类型: 按区域计费全国统一计费 免邮条件: 买${chargeMode}(含)以上免邮, 至的运费: 买${chargeMode}(含)以内, 收邮费元, 每多买 ...

  7. Java中给txt文本中写入数据

    public static void main(String[] args) {//txt文件生成的位置File outFile = new File("D:\\ce\\test.txt&q ...

  8. 在Java中如何读取用MATLAB的fwrite()函数写入文件的数据

    1 问题描述 今天编程的时候遇到一个问题 先前用MATLAB生成了一个数据文件 使用MATLAB的原因是MATLAB能够很快地对算法进行实现 效率较高 但是这个数据文件需要在Android程序中使用  ...

  9. java html转换mht,在java中,分析如何读取或者解析 MHTML (. mht ) 文件

    Prototype'parseMhtToFile'函数 below 从Cognos活动报告'mht'文件中删除html文件和其他工件,但可以根据其他目的定制. 这是用Groovy编写的,需要 Mime ...

最新文章

  1. linux mysql远程链接_Linux下mysql实现远程连接
  2. 代码改变世界,这 72 张面孔牛逼了!!!
  3. 运维开发必会技能之一——虚拟机管理
  4. lede更改软件源_Linux的上传和下载——Ubuntu中软件的安装和ftp服务器的搭建
  5. 关于国内部分电子病历编辑器的评价
  6. http://bbs.winos.cn/viewthread.php?tid=1147extra=page=2
  7. MUI 列表组件:文字居左中右(排版) - 代码篇
  8. 计算机数据库系统考研复试面试题,2016年山西财经大学081203计算机应用技术871数据库系统概论复试笔试最后押题五套卷...
  9. dingtalk 推送手机号信息 golang_Python学习第九十六天:Python调用钉钉机器人推送消息...
  10. 有观赏性的c语言程序,设计一个C语言程序,对以孩子链表表示的树计算该树的深度- 一起装修网...
  11. RS编码过程通俗理解
  12. 基于物联网的智能门锁应用系统设计方案
  13. 微管理:给你一个技术团队,你该怎么管札记-化繁为简
  14. BottomNavigationView 动态切换Icon且保留原图颜色
  15. Heka nginx input
  16. 嵌入式开发板设置IP
  17. 【深度强化学习】DRL算法实现pytorch
  18. mysql主从数据一致性问题及MHA和MGR的架构及底层原理
  19. 制定新的计划,走起(r13笔记第1天)
  20. 【前端知识之CSS】CSS3新增特性

热门文章

  1. 动态库(共享库)的制作和使用
  2. 阿里P8大佬亲自教你!java程序设计第四版pdf
  3. 我在美团Android研发岗工作的那5年,含泪整理面经
  4. 2017-2018-1 20179215《Linux内核原理与分析》第二周作业
  5. OpenGL研究3.0 多边形区域填充
  6. VMware使两台windows虚拟机能够互相ping通
  7. 利用find同时查找多种类型文件
  8. Windows五种IO模型性能分析和Linux五种IO模型性能分析
  9. 联系表单 1_copy
  10. Cocos2D 添加 UIView