所有的流,无论是输入流还是输出流,使用完毕之后,都应该关闭。 如果不关闭,会产生对资源占用的浪费。 当量比较大的时候,会影响到业务的正常开展。
我们可以把定义在try()里 try,catch,finally结束的时候 会自动关闭
这种编写代码的方式叫做
try-with-resources
这是从JDK7开始支持的技术所有的流,都实现了一个接口叫做
AutoCloseable
,任何类实现了这个接口,都可以在try()中进行实例化。 并且在try, catch, finally结束的时候自动关闭,回收相关资源
public static void main(String[] args) {
File f = new File("d:/test.txt");
try(FileInputStream fis = new FileInputStream(f)){
byte[]all = new byte[(int)f.length()];
fis.read(all);
for(byte b : all){
System.out.println(b);
}
}catch(IOException e){
e.printStackTrace();
}
}
D盘新建test.txt写上一些数据
本文以10.6M
文本文件 10240000字节
拆分为例 暂时不考虑大文件
public static void main(String[] args) {
File f = new File("d:/test.txt");
try(FileInputStream fis = new FileInputStream(f)){
byte[]all = new byte[(int)f.length()];
fis.read(all);
for (int i = 0;i <= all.length/10240000; i++){
String eachName = f.getName() + "-" + i;
File eachFile = new File(f.getParent() + eachName);
FileOutputStream fos = new FileOutputStream(eachFile);
if (i == all.length/10240000){
fos.write(all,i*10240000,all.length - i*10240000);
}else{
fos.write(all,i*10240000,10240000);
}
fos.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
文本文件中含有中文的话 查看拆分文件部分可能乱码 没关系 这是因为 中文字符串转换成字节是两个字节 拆分中 i*10240000
可能把两个字节分开了 不影响之后的合并文件
FileOutputStream(File file)
构造方法是覆盖写入 可以使用FileOuputStream(File file,boolean appendFlag)
来追加写入File f = new File("d:/test.txt");
for (int i=0;i<=13;i++){
File eachFile = new File("d:/test.txt-" + i);
File mergeFile = new File("d:/testMerge.txt");
try(FileInputStream fis = new FileInputStream(eachFile)){
byte[]all = new byte[(int)eachFile.length()];
fis.read(all);
FileOutputStream fos = new FileOutputStream(mergeFile,true);
fos.write(all);
fos.close();
System.out.println(eachFile.length());
}catch (IOException e){
e.printStackTrace();
}
Java学习笔记 之I/O流系列 关闭流 拆分文件 合并文件
原文:https://www.cnblogs.com/rongyaommm/p/12245227.html