如何在java中复制资源文件夹中的文件

时间:2017-08-30 02:50:31

标签: java file

需要快速帮助。我是Java新手。在我的项目中,我有输入&资源中的输出文件夹。在输入文件夹里面我有一个csv文件。我需要通过java代码将该文件移动到输出文件夹。如何将该输入文件复制到输出目录。我在谷歌尝试但没有得到一个有效的解决方案。我的项目结构基于标准的maven项目。

1 个答案:

答案 0 :(得分:1)

我认为您可以使用至少四种方法将csv文件移动到其他目录。

我假设您已经知道绝对目录路径

方法1. apache公共方式

您可以使用apache commons io library。

public static void moveWithApacheCommonsIO()
    {
        File sourceFile = new File("resource/AssetsImportCompleteSample.csv");
        File destinationFile = new File("resource/aa/AssetsImportCompleteSample.csv");

        try {
            FileUtils.moveFile(sourceFile, destinationFile);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

方法2. java的NIO方式

你也可以在java中使用nio(非阻塞io)

public static void moveWithFileNIO()
    {
        File sourceFile = new File("resource/AssetsImportCompleteSample.csv");
        File destinationFile = new File("resource/aa/AssetsImportCompleteSample.csv");
        FileInputStream inputStream = null;
        FileOutputStream outputStream = null;

        sourceFile.deleteOnExit();

        try {
            inputStream = new FileInputStream(sourceFile);
            outputStream = new FileOutputStream(destinationFile);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        final FileChannel inChannel = inputStream.getChannel();
        final FileChannel outChannel = outputStream.getChannel();

        try {
            inChannel.transferTo(0, inChannel.size(), outChannel);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally
        {
            try {
                inChannel.close();
                outChannel.close();
                inputStream.close();
                outputStream.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

    }

方法3. java的传统方式

您可以在java中使用传统方法和输入流。(阻止IO)

public static void moveWithFileInOutStream()
    {
        File sourceFile = new File("resource/AssetsImportCompleteSample.csv");
        File destinationFile = new File("resource/aa/AssetsImportCompleteSample.csv");
        InputStream fin = null;
        OutputStream fout = null;

        sourceFile.deleteOnExit();

        try {
            fin = new BufferedInputStream(new FileInputStream(sourceFile));
            fout = new BufferedOutputStream(new FileOutputStream(destinationFile));

            byte[] readBytes = new byte[1024];
            int readed = 0;


            while((readed = fin.read(readBytes)) != -1)
            {
                fout.write(readBytes, 0, readed);

            }

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally
        {
            try {
                fin.close();
                fout.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }

方法4.使用JNI(Java本机接口)

最后,您可以使用某些功能,如mv或MovFile,具体取决于您使用JNI的操作系统。

我认为这超出了本主题的范围。你可以谷歌它或看到JNA库来完成你的任务。

以下是完整的代码。

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.channels.FileChannel;

import org.apache.commons.io.FileUtils;

public class MovefileTest {

    public static void moveWithApacheCommonsIO()
    {
        File sourceFile = new File("resource/AssetsImportCompleteSample.csv");
        File destinationFile = new File("resource/aa/AssetsImportCompleteSample.csv");

        try {
            FileUtils.moveFile(sourceFile, destinationFile);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static void moveWithFileInOutStream()
    {
        File sourceFile = new File("resource/AssetsImportCompleteSample.csv");
        File destinationFile = new File("resource/aa/AssetsImportCompleteSample.csv");
        InputStream fin = null;
        OutputStream fout = null;

        sourceFile.deleteOnExit();

        try {
            fin = new BufferedInputStream(new FileInputStream(sourceFile));
            fout = new BufferedOutputStream(new FileOutputStream(destinationFile));

            byte[] readBytes = new byte[1024];
            int readed = 0;


            while((readed = fin.read(readBytes)) != -1)
            {
                fout.write(readBytes, 0, readed);

            }

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally
        {
            try {
                fin.close();
                fout.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }

    public static void moveWithFileNIO()
    {
        File sourceFile = new File("resource/AssetsImportCompleteSample.csv");
        File destinationFile = new File("resource/aa/AssetsImportCompleteSample.csv");
        FileInputStream inputStream = null;
        FileOutputStream outputStream = null;

        sourceFile.deleteOnExit();

        try {
            inputStream = new FileInputStream(sourceFile);
            outputStream = new FileOutputStream(destinationFile);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        final FileChannel inChannel = inputStream.getChannel();
        final FileChannel outChannel = outputStream.getChannel();

        try {
            inChannel.transferTo(0, inChannel.size(), outChannel);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally
        {
            try {
                inChannel.close();
                outChannel.close();
                inputStream.close();
                outputStream.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

    }

    public static void main(String[] args) {

        //moveWithApacheCommonsIO();
        //moveWithFileNIO();
        moveWithFileInOutStream();

    }
}

此致