Несоответствие размера каталога после копирования файла - PullRequest
1 голос
/ 06 июня 2011

Надеюсь, кто-то видел это раньше. Я пытаюсь скопировать все содержимое каталога из источника в другой каталог, и для этого я начал использовать метод Commons FileUtils.copyDirectorytoDirectory (File src, File dest). Код довольно прост:

public static void copyDirtoDir(String src, String dest) {
    File s = new File(src);
    File d = new File(dest);
    try {
        FileUtils.copyDirectoryToDirectory(s, d);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Чтобы запустить этот тест в Linux, я запускаю приложение в виде JAR и передаю строки src и dest из командной строки. Проблема в том, что когда я проверяю размер результирующего каталога после выполнения, возникает огромная разница в размере (поскольку скопированный dir примерно вдвое больше исходного размера - проверяется с помощью 'du -sh').

Затем я просто попытался использовать nio.FileChannels следующим образом:

public static void copyFile(File in, File out) throws IOException {
    FileChannel source = new FileInputStream(in).getChannel();
    FileChannel destination = new FileOutputStream(out).getChannel();

        source.transferTo(0, source.size(), destination);

    source.close();
    destination.close();
}

Вызов этого метода для каждого файла в каталоге. Результирующий размер из этого варианта также примерно вдвое больше оригинала. Если я сделаю список содержимого каталогов, они будут одинаковыми.

Есть какой-либо пропущенный параметр или что-то, что может быть причиной этой разницы в размерах?

Ответы [ 2 ]

1 голос
/ 06 июня 2011

Javadoc сообщает, что copyDirectoryToDirectory копирует исходный каталог и все его содержимое в каталог с тем же именем в указанном целевом каталоге.

Не видя структуру каталогов, я предполагаю, что это может привести к двойным данным. Любая причина, почему вы не используете простой FileUtils.copyDirectory () ?

1 голос
/ 06 июня 2011

Не уверен, что происходит, но вы можете использовать diff для директорий diff . Я уверен, что это легко определит различия.

...