这是复制文件的有效方式吗?

时间:2011-12-29 02:53:08

标签: java recursion copy

这是一种在目录中复制所有文件的有效方法,包括子目录吗?有无限递归的机会吗?有什么我应该改变的吗?我知道它有效,但我认为应该有一种更简单的方法。

private void copy(File file, String path) {
        String fileName = file.getPath();
        System.out.println(fileName);
        fileName = fileName.substring(fileName.lastIndexOf("\\"));
        if (path == null)
            path = Storage.getStorageDirectoryPath();
        File toWrite = new File(path + File.separator + fileName);
        if (file.isDirectory()) {
            toWrite.mkdir();
            File inDirectory[] = file.listFiles();
            for (File f : inDirectory)
                copy(f, toWrite.getPath());
        } else {
            try {
                InputStream inStream = new FileInputStream(file);
                OutputStream outStream = new FileOutputStream(toWrite);

                byte buffer[] = new byte[1024];
                int length = 0;
                while ((length = inStream.read(buffer)) > 0) {
                    outStream.write(buffer, 0, length);
                }

                inStream.close();
                outStream.close();
            } catch (IOException e) {
                e.printStackTrace(); 
            }

        }
    }

由于

2 个答案:

答案 0 :(得分:1)

评论表明看起来很不错。您可能希望查看新的Java 7 API(新的NIO)。有一个教程here,看起来甚至有选项可以避免跟随链接。

如果你不能使用Java 7,旧的NIO有通道,你可以用旧方式打开文件后打开。它们包括方法transferFromtransferTo可能能够比Java更有效地完成它。

答案 1 :(得分:0)

为什么重新发明轮子?看一下Apache Common FileUtils中的方法,特别是copyDirectory