Это эффективный способ копирования файлов - PullRequest
1 голос
/ 29 декабря 2011

Это эффективный способ скопировать все файлы в каталоге, включая дочерние каталоги?Есть ли вероятность бесконечной рекурсии?Есть что-нибудь, что я должен изменить?Я знаю, что это работает, но я думаю, что должен быть более простой способ сделать это.

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 ]

1 голос
/ 29 декабря 2011

Выглядит довольно хорошо, как показывают комментарии. Возможно, вы захотите взглянуть на новый API Java 7 (новый NIO). Здесь есть учебник здесь , похоже, есть даже варианты, чтобы избежать перехода по ссылкам.

Если вы не можете использовать Java 7, в старом NIO есть каналы, которые вы можете открыть после открытия файла старым способом. Они включают методы TransferFrom и TransferTo , которые могут быть в состоянии сделать это более эффективно, чем вы могли бы в Java.

0 голосов
/ 30 декабря 2011

Зачем изобретать велосипед? взгляните на методы в FileUtils Apache Common, в частности copyDirectory .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...