Запись файлов в каталог, который все еще не существует - PullRequest
1 голос
/ 20 декабря 2010

Я использую этот скрипт на 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();

, это работает.Я полагаю, это происходит потому, что в этом случае он копирует файл в существующий каталог.

1 Ответ

6 голосов
/ 20 декабря 2010

Согласно этой статье (популярный поисковый запрос Google для 'java mkdir recursive'):

Посмотрите на java.io.File: он выполняет свою работуотлично, с функцией mkdirs:

    new File("c:/aaa/bbb/ccc/ddd").mkdirs();
...