java-文件流正确关闭资源
用文件流来拷贝一个文件,用到文件字节输入流(FileInputStream)和文件字节输出流(FileOutputStream),用输入流把字节文件读到缓冲数组中,然后将缓冲数组中的字节写到文件中,就很好的完成了文件的复制操作。
来,看一下代码
//1.创建源和目标
File srcFile = new File("C:/Users/15626/Desktop/test/123.txt");
File targetFile = new File("C:/Users/15626/Desktop/test/123_copy.txt");
//2.创建输入流和输出流
FileInputStream in = new FileInputStream(srcFile);
FileOutputStream out = new FileOutputStream(targetFile);
//3.输入 输出操作
byte[] buffer = new byte[10];
int len = 0;
while((len = in.read(buffer)) != -1){
//String str = new String(buffer,0,len);
out.write(buffer, 0, len);;
}
//4.关闭资源文件
in.close();
out.close();
完了你会发现出现了

全是错误,那是因为输出输出可能会出现异常,可能你会直接抛出去,那么怎么正确处理这些异常情况?
当然是try-catch-finally
FileInputStream in = null;
FileOutputStream out = null;
try{//可能出现问题的代码
//1.创建源和目标
File srcFile = new File("C:/Users/15626/Desktop/test/123.txt");
File targetFile = new File("C:/Users/15626/Desktop/test/123_copy.txt");
//2.创建输入流和输出流
in = new FileInputStream(srcFile);
out = new FileOutputStream(targetFile);
//3.输入 输出操作
byte[] buffer = new byte[10];
int len = 0;
while((len = in.read(buffer)) != -1){
//String str = new String(buffer,0,len);
out.write(buffer, 0, len);;
}
}catch(Exception e){//处理异常
e.printStackTrace();
}finally{
//4.关闭资源文件
try{
in.close();
out.close();
}catch(Exception e){
e.printStackTrace();
}
}
好了,到这里之后异常终于消除了,然而这个程序还是有问题:
当程序执行到 in = new FileInputStream(srcFile); 的时候,假设有个异常,然后程序后去处理这个异常,根本没有执行下面的程序,然而这时候out还是null,在finally中还关闭了out,本身没有异常,你制造了异常。 那么怎么解决呢?
那么将它们分开try就ok了:
finally{
//4.关闭资源文件
try{
if(in != null){
in.close();
}
}catch(Exception e){
e.printStackTrace();
}
try{
if(out != null){
out.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
到这你会发现程序的主体都在上面,然而下面却处理了这么多异常还有关闭资源,程序变得很难看!然而java7之后,出现了自动关闭资源的机制,我去,这感情好啊,来欣赏一下:
File srcFile = new File("C:/Users/15626/Desktop/test/123.txt");
File targetFile = new File("C:/Users/15626/Desktop/test/123_copy.txt");
try(//打开资源的代码
FileInputStream in = new FileInputStream(srcFile);
FileOutputStream out = new FileOutputStream(targetFile);
){
//3.输入 输出操作
byte[] buffer = new byte[10];
int len = 0;
while((len = in.read(buffer)) != -1){
//String str = new String(buffer,0,len);
out.write(buffer, 0, len);;
}
}catch(Exception e){
e.printStackTrace();
}
嗯,这个新特性很好!
try(打开资源的代码 ){
可能存在异常的代码
}catch(){
处理异常信息
}
java-文件流正确关闭资源的更多相关文章
- Java文件流应用:剪切文件
剪切的实际操作是: 第一步,先复制文件到指定位置, 第二步,删除原文件,这样就实现了剪切 与复制文件相比,多了一步删除文件 注意:删除文件必须在流关闭后,才能删除,否则,删除不了. 实例代码 pack ...
- Java文件流应用:复制文件
文件复制步骤 代码: package 文件流应用复制文件; import java.io.File; import java.io.FileInputStream; import java.io.Fi ...
- Java 文件流操作.
一.概念 在Java中,文件的输入和输出是通过流(Stream)来实现的.一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是 Internet 上的某个 URL.对 ...
- [翻译][Java]ExecutorService的正确关闭方法
https://blog.csdn.net/zaozi/article/details/38854561 https://blog.csdn.net/z69183787/article/details ...
- Java文件 ---流
分类 根据数据走向,分为输入流.输出流 根据处理的数据类型,分为字节流.字符流 字节流 可以处理所有类型的数据,如MP3.图片.文字.视频等.在读取时,读到一个字节就返回一个字节. 在Java中对应的 ...
- Java文件流下载并提示文件不存在
做文件下载功能的时候,一般使用流的形式下载文件, 如果源文件不存在,下载页面可能就会没有提示,或者一片空白 用户操作之后可能一头雾水,那如何友好提示呢? 想到的有两种 1.可以尝试下载一个名称为:文件 ...
- Java文件流之练习
1 )将"今年是反法西斯胜利70周年,举国欢庆,所以要放假啦" 字符串 使用文件字符输出流 写入到oldhappy.txt文件中,复写10000行, 要求换行 在文件的开头写入当前 ...
- java文件流操作
package common; import java.io.*;import java.math.BigDecimal;import java.util.ArrayList;import java. ...
- 9:关于Maven工程的文件标识(定义java文件源码,资源文件)
随机推荐
- NPOI2.2.0.0实例详解(八)—设置EXCEL单元格【数字格式】
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- CentOS查看CPU、内存、版本等系统信息
CentOS查看系统信息 一:查看CPU more /proc/cpuinfo | grep "model name" grep "model name" /p ...
- Template、ItemsPanel、ItemContainerStyle、ItemTemplate (部分内容有待验证)
以下摘自“CSDN”的某人博客,部分内容有待验证,需注意“辨别学之....” 1.Template是指控件的样式 在WPF中所有继承自contentcontrol类的控件都含有此属性,(继承自Fram ...
- Lograge(2350✨) 在产品环境显示定制改良的日志输出。
Lograge https://github.com/roidrage/lograge 改良Rails默认的请求日志的记录. 它会精明的处理好那些noisy和无用的,未解析的,在context中运行多 ...
- Mysql之explain调优
Explain调优 使用explain语法,对SQL进行解释,根据其结果进行调优: MySQL 表关联的算法是 Nest Loop Join,是通过驱动表的结果集作为循环基础数据,然后一条一条地通过该 ...
- 修改Pycharm for Mac背景色
Mac 上面的Pycharm的背景是白色,太刺眼,网上教程那么多,实用性都不高,最终在csdn找到了一个. 修改步骤如下: pycharm -->Preferences --> Appea ...
- CentOS6.6系统中安装配置Samba的教程
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通 ...
- python环境配置
有个chatserver.py文件写的服务器代码,mac下终端执行python chatserver.py 总是报上面的错,求解 ImportError: No module named twist ...
- fzu Problem 2275 Game(kmp)
Problem 2275 Game Accept: 62 Submit: 165Time Limit: 1000 mSec Memory Limit : 262144 KB Proble ...
- 记录一个bootstrap因js加载顺序导致的问题(tstrap-table-mobile.min.js:7 Uncaught TypeError: Cannot read property 'defaults' of undefined)
问题描述: 网上找了会没看到答案,然后看了下源码,发现也没有问题,想到js加载的顺序,改了下,发现问题没了. 正确的顺序: 我之前把 <script src="/js/plugins/ ...