欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

文件读写操作

程序员文章站 2022-07-12 19:46:42
...
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class FileReaderAndWriter
{
    public static void main(String[] args)
    {
        String srcFilePathName = "D:/test.txt";
        String targetFilePathName = "z:/test.txt";
        MultiFileOperation(srcFilePathName, targetFilePathName);
    }

    public static void MultiFileOperation(String srcFilePathName, String targetFilePathName)
    {
        /** 通过NIO实现文件读写方式1 */
        FileInputStream fin1 = null;
        FileOutputStream fout1 = null;
        long start = 0;
        try
        {
            fin1 = new FileInputStream(srcFilePathName);
            fout1 = new FileOutputStream(targetFilePathName);
            FileChannel fcin = fin1.getChannel();
            FileChannel fcout = fout1.getChannel();
            int fileLength = (int) fcin.size();
            start = System.currentTimeMillis();
            fcin.transferTo(0, fileLength, fcout);
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                fin1.close();
                fout1.close();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
        long end = System.currentTimeMillis();
        long time1 = end - start;
        System.out.println("NIO_time1: " + time1);
       

        /** 通过NIO实现文件读写方式2 */
        FileInputStream fin11 = null;
        FileOutputStream fout11 = null;
        try
        {
            fin11 = new FileInputStream(srcFilePathName);
            fout11 = new FileOutputStream(targetFilePathName);
            FileChannel fcin11 = fin11.getChannel();
            FileChannel fcout11 = fout11.getChannel();
            ByteBuffer buffer = ByteBuffer.allocate(512);
            start = System.currentTimeMillis();
            while (fcin11.read(buffer) != -1)
            {
                buffer.flip();
                fcout11.write(buffer);
                /** 从缓冲区写入数据之后调用此方法,以防写入不完整 */
                buffer.compact();
                buffer.clear();
            }
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                fin11.close();
                fout11.close();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
        end = System.currentTimeMillis();
        long time11 = end - start;
        System.out.println("NIO_time2: " + time11);
    }
}