Я использую этот скрипт на WINDOWS
public void copyFile(File sourceDirectory, File targetFile, File targetDirectory) throws IOException{
String temp = targetFile.getAbsolutePath();
String relativeD = temp.substring(sourceDirectory.getAbsolutePath().length(), targetFile.getAbsolutePath().length());
String rootD = sourceDirectory.getName();
String fullPath = targetDirectory.getAbsolutePath() + rootD + relativeD;
File fP = new File( fullPath );
System.out.println("PATH: " + fullPath);
FileChannel inChannel = new FileInputStream(targetFile).getChannel();
FileChannel outChannel = new FileOutputStream( fP ).getChannel();
int maxCount = (64 * 1024 * 1024) - (32 * 1024);
long size = inChannel.size();
long position = 0;
while (position < size) {
position += inChannel.transferTo(position, maxCount, outChannel);
}
if (inChannel != null) inChannel.close();
if (outChannel != null) outChannel.close();
}
То, что я делаю, просто.Мне нужно скопировать файл из местоположения в другое, но я должен сохранить каталоги, в которых они находятся.
Так что с relativeD
я беру что-то вроде этого: dir / files.sql или просто files.sql .
Это происходит потому, что для определенных каталогов мне нужно их рекурсивно копировать с учетом древовидной структуры.
Проблема заключается в этом методене работает.Я не знаю почему, потому что если я использую простой
FileChannel outChannel = new FileOutputStream( new File( targetDirectory, targetFile ) ).getChannel();
, это работает.Я полагаю, это происходит потому, что в этом случае он копирует файл в существующий каталог.