Несоответствие размера каталога после копирования файла

#java #apache #nio #apache-commons

#java #apache #nio #apache-commons

Вопрос:

Надеюсь, кто-нибудь видел это раньше. Я пытаюсь скопировать все содержимое каталога из исходного кода в другой каталог, и для этого я начал использовать метод 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 из командной строки. Проблема в том, что когда я проверяю результирующий размер каталога после выполнения, обнаруживается огромная разница в размере (при этом скопированный каталог примерно в два раза больше исходного — проверяется с помощью ‘du -sh’).

Затем я просто попробовал с nio.Файловые каналы следующим образом:

 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();
}
  

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

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

Комментарии:

1. вы уверены, что вы просто не запускали тест дважды, создавая дубликаты (каким-то образом) в dest dir?

2. Может быть, в каталоге есть программная или жесткая ссылка, по которой выполняется операция копирования, а не просто копирование ссылки?

3. @matt b — Я уверен :), @Sven — это звучит возможно, сейчас проверяю…

4. Не связано с программной или жесткой ссылкой. Пропуск их возвращает тот же результат

5. Являются ли файлы правильного размера?

Ответ №1:

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

Комментарии:

1. эта команда не сообщает о различиях. Если я перечислю файлы из обоих, они будут одинаковыми: (

Ответ №2:

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

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