Java如何基于IO流实现同一文件读写操作
作者:Y_wee 发布时间:2023-07-30 15:06:38
标签:Java,IO,文件,读写,操作
1、注意事项
众所周知,对一个文件进行读写操作时,我们需要创建对应的输入流和输出流
但需要注意的是,读写操作不能同时进行(边读边写),即不能同时打开输入流和输出流,直白一点说就是不能同时对同一个文件的输入流和输出流进行赋值,否则影响文件进行正常的读写操作。如果是不同的文件,则可以边读边写。
2、那么我们怎么对同一个文件进行读写操作呢?
不能边读边写,但是可以先读后写,先写后读。
a、先读后写
打开输入流,对文件进行读操作,操作完成之后把输入流关掉(注意一定要关掉)。然后再打开输出流,对文件进行写操作,操作完成之后再把输出流关掉。
b、先写后读
原理同上
3、案例(代码)
package com.yl.homework.io;
import java.io.*;
import java.util.ArrayList;
/**
* (字符流)读取一个文本文件,每行都追加一个“好”,在文件结尾再追加“完毕”。
*/
public class Test3 {
public static void main(String[] args) {
//文件对象
File file=new File("H:\\ioText\\homework.txt");
//字符缓冲流
BufferedReader bufferedReader=null;
BufferedWriter bufferedWriter=null;
//存储读取的内容
ArrayList<String> arrayList=new ArrayList<>();
try {
//打开输入流
bufferedReader=new BufferedReader(new FileReader(file));
//存储读取内容
String content="";
//读取数据
while ((content=bufferedReader.readLine())!=null){
System.out.println(content);
//每行都追加一个“好”
content+="好";
//把内容存入arrayList
arrayList.add(content);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
//关闭流
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
//打开输出流
bufferedWriter=new BufferedWriter(new FileWriter(file));
//遍历arrayList
for (int i=0;i<arrayList.size();i++){
//判断是不是最后一行
if (i==arrayList.size()-1){
//写数据
bufferedWriter.write(arrayList.get(i));
//刷新
bufferedWriter.flush();
}else{
//写数据
bufferedWriter.write(arrayList.get(i));
//换行
bufferedWriter.newLine();
//刷新
bufferedWriter.flush();
}
}
//在文件结尾再追加“完毕”
bufferedWriter.write("完毕");
//刷新文件
bufferedWriter.flush();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
//关闭流
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
来源:https://www.cnblogs.com/Y-wee/p/13413943.html


猜你喜欢
- 本文实例讲述了Android中View的炸裂特效实现方法。分享给大家供大家参考,具体如下:前几天微博上被一个很优秀的 Android 开源组
- 函数InternetGetConnectedState返回本地系统的网络连接状态。语法:BOOL InternetGetConnectedS
- 最近遇到一个需求需要圆形listview作为悬浮窗,费了九牛二虎之力终于开发出来了,特别有成就感,下面分享下案例,项目原因,只能分享一部分供
- 一、概述简单理解为 异步消息插队并优先执行。场景:排队买票先来了一个普通用户来排队,买完票走了。后面又来了一个VIP用户A来买票 就一直站在
- 开发环境:android4.1.1实验功能:在第一个Hello World!为标签的activity中显示good,该界面中有一个名为Nex
- 前言:项目中经常会用到类似于QQ侧滑点击删除的效果,网上的开源库也很多。个人感觉SwipeLayout最好用。下面介绍怎么使用。一、首先导入
- 现在版本更新有两种处理方式:跳转到App应用市场,通过应用市场下载更新安装。在App内进行Apk下载,下载完成后更新安装。实现思路:请求后台
- 一、简介上篇介绍了一个自己做的管理系统,最近空闲的时间自己在继续做,把之前登录时候自定义的 * 过滤器换成了基于SpringSecurity
- 1.Feign传统方式的不足①.在微服务架构中,当我们使用Feign传统方式进行服务调用的时候,需要在每个服务消费者中添加FeignClie
- 本文实例讲述了Android实现EditText中添加和删除bitmap的方法。分享给大家供大家参考,具体如下:SpannableStrin
- 什么是WebSocket WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间
- 如题,市面上常见的方法是:var handle = bmp.GetHicon(); //得到图标句柄return Icon.Fr
- 一、Servlet3.0异步请求@WebServlet(value = "/async", asyncSupported
- 1、Java字符串在 Java 中字符串被作为 String 类型的对象处理。 String 类位于 java.lang 包中,默认情况下该
- 相信对于手机的时间日期设置大家一定都不陌生吧,今天举一个关于时间日期设置的示例,其中有些许不完善之处,例如如何使设置的时间日期和手机系统同步
- 一、前言在SpringBoot工程(注意不是SpringCloud)下使OpenFeign的大坑。为什么不用SpringCloud中的Fei
- 本文实例为大家分享了Unity动画混合树实例代码,供大家参考,具体内容如下先看效果游戏动画中的一项常见任务是在两个或更多相似运动之间进行混合
- 这篇文章主要介绍了java split()使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 本文实例为大家分享了iOS新浪微博分享功能的具体代码,供大家参考,具体内容如下做新浪分享 需先去http://open.weibo.com/
- 前言本文主要给大家介绍了关于Kotlin委托属性与区间的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。委托属性有