java:NIO读写文件的示例

来源:互联网 发布:lg d2341软件 编辑:程序博客网 时间:2024/05/22 09:46

Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。
NIO方式读数据非常简单,
创建一个缓冲区(ByteBuffer),通过一个FileChannel (从FileInputStream 创建)完成缓冲区的数据读入;
NIO方式写数据也简单,
创建一个缓冲区(ByteBuffer),向其中填充数据;然后通过一个FileChannel (从FileOutputStream 创建)完成缓冲区的数据写入;
注意:读写结束后,要调用FileChannel.close()关闭通道释放资源。
下面是通过NIO进行文件读写的java实例代码。

import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;public class NIOSample{    /**     * NIO方式复制文件<br>     * 目标文件所在的文件夹如果不存在自动创建文件夹     * @param src 源文件     * @param dst 目标文件      * @throws IOException     */    public static final void nioCopyFile(File src,File dst) throws IOException {        if(null==src||null==dst)            throw new NullPointerException("src or dst is null");        if(!src.exists()||!src.isFile())            throw new IllegalArgumentException(String.format("INVALID FIILE NAME(无效文件名) src=%s",src.getCanonicalPath()));        if (dst.exists() &&!dst.isFile()) {            throw new IllegalArgumentException(String.format("INVALID FIILE NAME(无效文件名) dst=%s",dst.getCanonicalPath()));        }        File folder = dst.getParentFile();        if (!folder.exists())            folder.mkdirs();        if(((src.length()+(1<<10)-1)>>10)>(folder.getFreeSpace()>>10))            throw new IOException(String.format("DISK ALMOST FULL(磁盘空间不足) %s",folder.getCanonicalPath()));        FileInputStream fin=null;         FileOutputStream fout = null;        FileChannel fic = null;        FileChannel foc = null;        try {            fin=new FileInputStream(src);            fout = new FileOutputStream(dst);            // 从FileInputStream创建用于输入的FileChannel            fic = fin.getChannel();            // 从FileOutputStream 创建用于输出的FileChannel            foc = fout.getChannel();            // 16KB缓冲区            ByteBuffer bb = ByteBuffer.allocate(1024<<4);            // 根据 read返回实际读出的字节数 中止循环            while(fic.read(bb)>0){                              // 缓冲区翻转用于输出到foc                bb.flip();                foc.write(bb);                  // 清空缓冲区用于下次读取                          bb.clear();            }        } finally {            // 安全释放资源            if(null!=fic)                fic.close();            if(null!=foc)                foc.close();            if(null!=fin)                fin.close();            if(null!=fout)                fout.close();        }    }}
1 0
原创粉丝点击