博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多个非空文件整合至一个文件
阅读量:6578 次
发布时间:2019-06-24

本文共 1625 字,大约阅读时间需要 5 分钟。

目标:将多个非空的文件合并至一个文件中,并删除原来的文件。

使用类FileChannel,FileChannel是Java NIO中的一个连接到文件的通道。

那么,什么是NIO呢?

Java 的NIO是针对原java io所开发出来的一套新的io api接口,Java NIO就是Java NEW IO ,它是从Java 1.4版本开引入的一个新的IO API,替代标准的Java IO API.

NIO与IO有什么区别呢?

区别1:IO是面向流的,每次从流中读一个或者多个字节,直至读完所有的直接,没有缓存;而NIO是面向缓冲区的,数据读到缓冲区后可在缓冲区前后移动,增加了处理过程中的灵活性。

区别2:IO的各种流是阻塞的,即当一个线程调用read()或者write()时,直到读取得一些数据或者数据完全写入,否则该线程一直被阻塞,此期间不能有其他任何动作;而NIO是非阻塞模式,一个线程发送请求时,只是取得当前可用的数据,若当前没有数据可用,不会获取,且在此期间,这个线程可以同时去做别的事情,所以一个单独的线程可以管理多个输入与输出通道。

主要的理解就是这样的,以下是代码示例:

public  final int BUFSIZE = 1024 * 32; public void mergeFiles(String outFile, String[] files) {            FileChannel outChannel = null;            System.out.println("Merge " + Arrays.toString(files) + " into " + outFile);            try {                outChannel = new FileOutputStream(outFile).getChannel();                for(String f : files){                    FileChannel fc = new FileInputStream(f).getChannel();                     ByteBuffer bb = ByteBuffer.allocate(BUFSIZE);//创建一个容量为BUFSIZE的缓冲区                    while(fc.read(bb) != -1){                        bb.flip();//将一个处于存数据状态的缓冲区变成一个处于取数据的状态                        outChannel.write(bb);                        bb.clear();//重置缓冲区的主要索引,而非清空缓冲区                    }                    fc.close();                }                System.out.println("Merged!! ");            } catch (IOException ioe) {                ioe.printStackTrace();            } finally {                try {
if (outChannel != null) {outChannel.close();}} catch (IOException ignore) {} } }

 

删除文件使用file.delete()方法即可。

 

转载于:https://www.cnblogs.com/wenf/p/5805481.html

你可能感兴趣的文章
第三章:如何建模服务
查看>>
Project Euler 345: Matrix Sum
查看>>
你可能不知道的技术细节:存储过程参数传递的影响
查看>>
HTML转义字符大全(转)
查看>>
[摘录]调动员工积极性的七个关键
查看>>
Backup Volume 操作 - 每天5分钟玩转 OpenStack(59)
查看>>
.htaccess 基础教程(四)Apache RewriteCond 规则参数
查看>>
转: maven进阶:一个多模块项目
查看>>
Android控件之HorizontalScrollView 去掉滚动条
查看>>
UVM中的class--2
查看>>
ORACLE 存储过程异常捕获并抛出
查看>>
博客园博客美化相关文章目录
查看>>
root用户重置其他密码
查看>>
Oracle推断值为非数字
查看>>
多年前写的一个ASP.NET网站管理系统,到现在有些公司在用
查看>>
vue-cli中理不清的assetsSubDirectory 和 assetsPublicPath
查看>>
从JDK源码角度看Short
查看>>
parceljs 中文文档24小时诞生记
查看>>
五年 Web 开发者 star 的 github 整理说明
查看>>
Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo
查看>>