流的概念
所有的流, 无论是输入流还是输出流, 使用完毕之后, 都应该关闭. 如果不关闭, 会产生对资源占用的浪费. 当量比较大的时候, 会影响到业务的正常开展.
关闭流的方法
我们可以把定义在 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();
- }
来源: http://www.bubuko.com/infodetail-3400820.html