上学的时候,也许老师告诉你用完文件流记得要关闭,可能为了省事,他也没仔细的给你示范如何关闭,

实际开发中,要是不能正确关闭流,服务器分分钟炸掉,那是很正常的。

一般都是新人才会有这个问题。当然都是从新人走过来的嘛。

下面是大师兄总结的关闭文件流的基本动作,有不合适的,还请指出来。

流在try外面声明,在try里面初始化,然后在finally里面给close,还记得处理异常e

finally里面close的时候也得再次try catch 一下。

具体代码和具体的解释如下:

/**

* 测试正确关闭文件流

*/

private static void testCloseFileStream() {

final Logger LOG = LoggerFactory.getLogger(Cmshome.class);

String fileName = "";

InputStream inputStream = null;//声明个引用,因为这个new对象的时候也是会异常的

try {

//这里就会异常,如果文件名不存在的话。

inputStream = new FileInputStream(fileName);

} catch (IOException e) {

//这个主要是把出现的异常给人看见,不然就算异常了,看不到就找不到问题所在。

LOG.debug("loadProperties IOException:" + e.getMessage());

} finally {

if (inputStream != null) {

try {

inputStream.close(); // 关闭流

} catch (IOException e) {

LOG.debug("inputStream close IOException:" + e.getMessage());

}

}

}

}

//错误的关闭文件的方式的解释:

Properties properties = new Properties();

try {

//这要是异常,直接就到catch语句,下面的close就不会执行啦,关闭就没用啦

InputStream wrongWay = new FileInputStream(fileName);

properties.load(wrongWay);

wrongWay.close(); // 关闭流

} catch (IOException e) {

e.printStackTrace();

}

//下面是new文件流和关闭文件流的源码,有抛异常动作。

public FileInputStream(String name) throws FileNotFoundException {

this(name != null ? new File(name) : null);

}

//这个是抽象类(abstract class)里面的方法,所以没有具体实现过程。

public void close() throws IOException {}

关于一楼的留言的更新:

这是我的代码,是经过debugs分析的,就一条红线。

然后下面是这个红线的详细描述。

他说的这个是编码的问题,说,我这个读文件的操作,是按默认的编码读的,警告我,选个好点的api,设置上指定的api,这样就可以很好的跨平台使用。并没有说,这个关文件流的毛病。

java 文件流关闭 finally_Java如何正确的使用try catch finally关闭文件流的总结相关推荐

  1. java finally关闭文件流_Java如何正确的使用try catch finally关闭文件流的总结

    上学的时候,也许老师告诉你用完文件流记得要关闭,可能为了省事,他也没仔细的给你示范如何关闭, 实际开发中,要是不能正确关闭流,服务器分分钟炸掉,那是很正常的. 一般都是新人才会有这个问题.当然都是从新 ...

  2. Java如何正确的使用try catch finally关闭文件流的总结

    上学的时候,也许老师告诉你用完文件流记得要关闭,可能为了省事,他也没仔细的给你示范如何关闭, 实际开发中,要是不能正确关闭流,服务器分分钟炸掉,那是很正常的. 一般都是新人才会有这个问题.当然都是从新 ...

  3. java管道流文件的复制_JavaIO 总结笔记三 基本字节字符输入输出流和文件复制...

    一.IO体系 1.流主要分两大类:字节流 字符流 2.在硬盘上的文件,都是以二进制字节形式存储的,所以不管啥文件,读写时都应该用字节流 3.在java的早期版本中,的确只有字节流,没有字符流 4.一个 ...

  4. JAVA编译成文件的说法_下列关于使用Javac命令编译后生成文件的说法中,正确的是?...

    下列关于使用Javac命令编译后生成文件的说法中,正确的是? 答:编译后生成的文件可以在Java虚拟机中运行\n\n编译后生成的文件为二进制文件\n\n编译后生成文件的后缀名为.class 线性表的链 ...

  5. java vi命令 退出_Git 使用vi或vim命令打开、关闭、保存文件

    1 vi & vim 有两种工作模式: (1)命令模式:接受.执行 vi & vim 操作命令的模式,打开文件后的默认模式: (2)编辑模式:对打开的文件内容进行 增.删.改 操作模式 ...

  6. Java通过流的方式从OSS打压缩包下载或者直接下载文件,并返回输出流给前端(弹框选择下载路径)

    需求 提供一个接口,前端通过按钮下载文件,根据不同的id下载对应的文件,由于都是多个文件,需要进行打压缩包下载,文件保存在oss服务器上 注意:我的压缩包名称和文件名称都是通过日期或者uuid生成的, ...

  7. java创建的zip无法打开或打开显示不可预料的压缩文件

    问题出现 问题来源是我做的一个文件导出功能 java创建zip文件,结果在我的电脑上能够打开,在同事的mac或者未安装360压缩的电脑上打不开,然后我就分析应该是代码创建的这个文件有问题,可能360压 ...

  8. 使用Java生成的ZIP压缩包解压时出现不可预料的压缩文件末端的解决方案

    使用Java生成的ZIP压缩包解压时出现不可预料的压缩文件末端的解决方案 问题描述: 如下图所示,在解压Java程序生成的ZIP压缩包时出现不可预料的压缩文件末端, 问题分袖: 出现上面的情况,大概有 ...

  9. Java阶段性测试--知识点:数组,面向对象,集合、线程,IO流

    #Java基础测试 涉及知识点:数组,面向对象,重载,重写,继承,集合,排序,线程,文件流 一.多项选择题(可能是单选,也可能是多选) 1.下列标识符命名不合法的是(   D  ). A.$_Name ...

最新文章

  1. 外网访问arm嵌入式linux_嵌入式Linux系统编程——文件读写访问、属性、描述符、API
  2. 算法的威力:法国人用台式机打破由超级计算机创造的圆周率运算世界记录
  3. I.MX6 Android Linux shell MMPF0100 i2c 获取数据
  4. html、sqlserver、java基础总结
  5. c#给定编码中的字符无效_C#程序检查给定的字符串是否等于(==)运算符
  6. 借力 Docker ,三分钟搞定 MySQL 主从复制!
  7. linux awk浅析(转)
  8. php--获取用户ip
  9. 提示内存不足,但内存明明很多
  10. python拼音名_python生成随机中文姓名和拼音
  11. 【算法】合并两个有序链表
  12. 机器人抓取中物体3D定位算法介绍
  13. 国企直招,内推! 科陆电子--嵌入式工程师/C# 工程师
  14. 学计算机专业1050显卡够不够,gtx1050显卡性能怎么样
  15. 移植实时操作系统到 risc-v 架构芯片时上下文切换的实现
  16. Python自动化运维 - day9 - 进程与线程
  17. 游戏c#脚本语言,C#作为脚本语言执行解密
  18. MaxEnt分析流程和推荐的分析内容
  19. Qt中使用qrc管理和使用资源文件
  20. C++之 fgets函数

热门文章

  1. cc2530之外部中断实验
  2. CC1530的基础引脚实验
  3. 北航软院非全研究生备考指南
  4. 打造地图拼接利器(二)软件框架
  5. 三年级计算机活动记录,小学科学三年级下册活动记录表
  6. (干货)淘宝中小商家该如何做好微信粉丝营销?
  7. STM32搭建Linux开发环境之问题处理
  8. 主题:美剧职场口语:关于“妓女”的词儿种种
  9. 微信泡妞聊天技巧入门神贴
  10. 这些常见产品问题你会解吗?