java7 流关闭_Java学习笔记 之I/O流系列 关闭流 拆分文件 合并文件

Java学习笔记 之I/O流系列 关闭流 拆分文件 合并文件

####流的概念

所有的流,无论是输入流还是输出流,使用完毕之后,都应该关闭。 如果不关闭,会产生对资源占用的浪费。 当量比较大的时候,会影响到业务的正常开展。

####关闭流的方法

我们可以把定义在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字节拆分为例 暂时不考虑大文件

思路

读取文件数据

计算出拆分文件的个数(循环的次数)

for循环写出即可

#####代码

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)来追加写入

按顺序循环读取拆分的文件的内容 再写入到合并文件中

也可以把拆分文件内容写到byte数组中 最后再一起写入合并文件中

代码

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();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值