По своему опыту и после неоднократных тестов, проведенных мной и глубоких веб-исследований, я обнаружил, что основные библиотеки java ("Apache Commons", Google.coomons или Jcifs) не предсказывают случай "циклического копирования".»Файла в место назначения, которое по-разному отображается (обозначается с помощью другого RootPath в соответствии с более новым пакетом Path Class класса java.nio), которое в конце цикла отображения преобразуется в сам исходный файл.
Это ситуацияпотеря данных, потому что метод Outputsream и метод GetChannel jnio не позволяют себе в этом случае: исходный файл и конечный файл в действительности являются «одним и тем же файлом», и результатом этих методов является то, что файл теряется, лучше сказать, что размер файла становитсяДлина 0.
Как можно избежать этого, не выходя на более низкий уровень файловой системы или даже не сдаваясь более безопасному Runtime.exec, делегируя вещи в базовый SO
Если мне придетсязаблокировать файл назначения (описанные выше методы не позволяют этого), возможнос помощью самого старого класса RandomAccessFile?
Вы можете протестировать эти цитированные основные библиотеки с помощью общего метода "CopyFile (File origin, File dest)", выполнив:
1)исходная папка файла c: \ tmp \ test.txt, сопоставленная с виртуальным диском x: с помощью [SUBST x: c: \ tmp] cmd, таким образом, пытающаяся скопировать в x: \ test.txt
2)Аналогичный случай, если локальная папка c: \ tmp была открыта для общего доступа с помощью механизма общего доступа Windows, а место назначения представлено в виде пути UNC, заканчивающегося тем же именем файла
3) Другие аналогичные сетевые ситуации ...
Я думаю, что должно быть другое лучшее решение, но мой опыт работы с Java довольно мал, и поэтому я прошу об этом всем вам.Заранее благодарим, если заинтересованы в этой дискуссии в «реальном мире».