请教如何一个文件是否是close状态,谢谢

oracleperl 2020-01-11 12:16:28
如下,我如何在try catch里判断br和bw已经close()了?
BufferedReader br = new BufferedReader(new FileReader(args[1]));
BufferedWriter bw = new BufferedWriter(new FileWriter(args[2],true));
...全文
532 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lngrvr 2020-01-16
  • 打赏
  • 举报
回复
这种问题,要靠良好的代码习惯。经典代码如下:
InputStream in = null;
try {
in = new ... ;
while((int r = in.read()) != -1) {
...
}
}catch (IOException e) {
...
} finally {
if (in != null) { // 如果创建in的时候就出错,在in为null,无须处理。
try {
in.close();
} catch (IOException e) {
....;
}
}
}
oracleperl 2020-01-15
  • 打赏
  • 举报
回复
引用 3 楼 sunyiz 的回复:
[quote=引用 2 楼 oracleperl 的回复:][quote=引用 1 楼 sunyiz 的回复:] 当close时,如果你还在进行IO操作 会抛出这样一个异常

throw new IOException("Stream closed");
所以,你可以捕捉异常信息的关键字, 检查是否有 closed 关键字 来判断对应的流是否已关闭

		try {
			// IO操作
		} catch (Exception e) {
			String err = e.getMessage();
			if (err != null && err.indexOf("closed") > 0) {
				// 证明对应的流已关闭
			}
		}
我是要这样: 判断是否是close状态,如果不是,那么close()[/quote]Reader确实没有isClosed方法,所以其实你直接调用close就好了,Reader重复close并没有什么资源消耗[/quote] 重复close会报错
oracleperl 2020-01-15
  • 打赏
  • 举报
回复
求助....
Prof. ???????? 2020-01-15
  • 打赏
  • 举报
回复
finaly 中判断流对象是否为null,不能null就关闭它,不需要try中关一次,catch中再判断关一次
sunyiz 2020-01-15
  • 打赏
  • 举报
回复
引用 7 楼 oracleperl 的回复:
重复close会报错


既然你没法保证只在用完后close一次,
重复调用又会出错
那么就对你调用 close 方法的地方 try-catch 一下呗
catch 中什么都不输出

qq_39936465 2020-01-13
  • 打赏
  • 举报
回复
引用 楼主 oracleperl 的回复:
如下,我如何在try catch里判断br和bw已经close()了?
4楼说的很正确,一般用br==null来判断该流是否被关闭,null是关闭了,非null就需要关闭。
dkwuxiang 2020-01-13
  • 打赏
  • 举报
回复
finaly 中判断流对象是否为null,不能null就关闭它,不需要try中关一次,catch中再判断关一次
sunyiz 2020-01-11
  • 打赏
  • 举报
回复
当close时,如果你还在进行IO操作
会抛出这样一个异常

throw new IOException("Stream closed");


所以,你可以捕捉异常信息的关键字,
检查是否有 closed 关键字
来判断对应的流是否已关闭

try {
// IO操作
} catch (Exception e) {
String err = e.getMessage();
if (err != null && err.indexOf("closed") > 0) {
// 证明对应的流已关闭
}
}
sunyiz 2020-01-11
  • 打赏
  • 举报
回复
引用 2 楼 oracleperl 的回复:
[quote=引用 1 楼 sunyiz 的回复:] 当close时,如果你还在进行IO操作 会抛出这样一个异常

throw new IOException("Stream closed");
所以,你可以捕捉异常信息的关键字, 检查是否有 closed 关键字 来判断对应的流是否已关闭

		try {
			// IO操作
		} catch (Exception e) {
			String err = e.getMessage();
			if (err != null && err.indexOf("closed") > 0) {
				// 证明对应的流已关闭
			}
		}
我是要这样: 判断是否是close状态,如果不是,那么close()[/quote]Reader确实没有isClosed方法,所以其实你直接调用close就好了,Reader重复close并没有什么资源消耗
oracleperl 2020-01-11
  • 打赏
  • 举报
回复
引用 1 楼 sunyiz 的回复:
当close时,如果你还在进行IO操作 会抛出这样一个异常

throw new IOException("Stream closed");
所以,你可以捕捉异常信息的关键字, 检查是否有 closed 关键字 来判断对应的流是否已关闭

		try {
			// IO操作
		} catch (Exception e) {
			String err = e.getMessage();
			if (err != null && err.indexOf("closed") > 0) {
				// 证明对应的流已关闭
			}
		}
我是要这样: 判断是否是close状态,如果不是,那么close()

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧