Копирование файла с использованием Apache Commons FileUtils - PullRequest
0 голосов
/ 28 ноября 2018

При первом запуске я хочу скопировать данный File в новое местоположение с новым именем файла.

Каждый последующий запуск должен перезаписывать один и тот же файл назначения, созданный во время первого запуска.

Во время первого запуска целевой файл не существует.Существует только каталог.

Я написал следующую программу:

package myTest;

import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.file.Paths;

import org.apache.commons.io.FileUtils;

public class FileCopy {

    public static void main(String[] args) {
        TestFileCopy fileCopy = new TestFileCopy();
        File sourceFile = new File("myFile.txt");
        fileCopy.saveFile(sourceFile);
        File newSourceFile = new File("myFile_Another.txt");
        fileCopy.saveFile(newSourceFile);
    }
}

class TestFileCopy {
    private static final String DEST_FILE_PATH = "someDir/";
    private static final String DEST_FILE_NAME = "myFileCopied.txt";

    public void saveFile(File sourceFile) {
        URL destFileUrl = getClass().getClassLoader().getResource(DEST_FILE_PATH
                + DEST_FILE_NAME);
        try {
            File destFile = Paths.get(destFileUrl.toURI()).toFile();
            FileUtils.copyFile(sourceFile, destFile);
        } catch (IOException | URISyntaxException e) {
            e.printStackTrace();
        }
    }
}

Однако, это выдает исключение нулевого указателя в следующей строке:

File destFile = Paths.get(destFileUrl.toURI()).toFile();

Что яотсутствует?Каталог someDir находится прямо в корневом каталоге моего проекта в Eclipse.Оба исходных файла myFile.txt и myFile_Another.txt существуют непосредственно в корневом каталоге моего проекта в eclipse.

1 Ответ

0 голосов
/ 28 ноября 2018

Я использовал это, и оно работает, как я ожидаю:

public void saveFile1(File sourceFile) throws IOException {
        Path from = sourceFile.toPath();
        Path to = Paths.get(DEST_FILE_PATH + DEST_FILE_NAME);
        Files.copy(from, to, StandardCopyOption.REPLACE_EXISTING);
    }

Используя Java nio.

...