Java - переименовать или переместить файл
1. обзор
В этом кратком руководстве мы рассмотримrenaming / moving a File in Java - сначала с использованием JDK 6, затем JDK 7 с NIO, Google Guava и, наконец, библиотеки Apache Commons IO.
Эта статья является частьюthe “Java – Back to Basic” series здесь для примера.
Дальнейшее чтение:
Как скопировать файл с Java
Взгляните на некоторые распространенные способы копирования файлов в Java.
Введение в файловый API Java NIO2
Краткое и практическое руководство по Java NIO2 File API
2. С JDK 6
Начнем с простого решения Java, JDK6:
@Test
public void givenUsingJDK6_whenMovingFile_thenCorrect() throws IOException {
File fileToMove = new File("src/test/resources/toMoveFile_jdk6.txt");
boolean isMoved = fileToMove.renameTo(new File("src/test/resources/movedFile_jdk6.txt"));
if (!isMoved) {
throw new FileSystemException("src/test/resources/movedFile_jdk6.txt");
}
}
В этом примере - файл для перемещения существует, как и целевой каталог.
Обратите внимание, чтоrenameTo() выдает только два типа исключений -SecurityException - если менеджер безопасности запрещает запись в доступе к источнику или к месту назначения, иNullPointerException - в случае, если параметр target равен null . Если цель не существует в файловой системе -no exception will be thrown - и вам нужно будет проверить возвращенный флаг успеха метода.
3. С JDK 7
Давайте теперь посмотрим, как мы можем сделать то же самое с помощью NIO и JDK 7:
@Test
public void givenUsingJDK7Nio2_whenMovingFile_thenCorrect() throws IOException {
Path fileToMovePath =
Files.createFile(Paths.get("src/test/resources/" + randomAlphabetic(5) + ".txt"));
Path targetPath = Paths.get("src/main/resources/");
Files.move(fileToMovePath, targetPath.resolve(fileToMovePath.getFileName()));
}
В JDK7 был значительно обновлен пакет NIO и добавленPath - это предоставляет методы для удобного управления артефактами файловой системы.
Обратите внимание, что, как и в предыдущем примере, должен существовать как файл, так и целевой каталог.
4. С гуавой
Далее - давайте посмотрим на решение Guava:
@Test
public void givenUsingGuava_whenMovingFile_thenCorrect()
throws IOException {
File fileToMove = new File("src/test/resources/fileToMove.txt");
File destDir = new File("src/test/resources/");
File targetFile = new File(destDir, fileToMove.getName());
com.google.common.io.Files.move(fileToMove, targetFile);
}
Опять же, в этом примере файл, который нужно переместить, и целевой каталог должны существовать.
5. С Commons IO
Наконец, давайте посмотрим на решение с Apache Commons IO - возможно, самое простое:
@Test
public void givenUsingApache_whenMovingFile_thenCorrect() throws IOException {
FileUtils.moveFile(
FileUtils.getFile("src/test/resources/fileToMove.txt"),
FileUtils.getFile("src/test/resources/fileMoved.txt"));
}
Эта одна строка, конечно, позволит как перемещать, так и переименовывать - в зависимости от того, является ли целевой каталог одинаковым или нет.
В качестве альтернативы - вот решение для конкретного перемещения, которое также позволяет нам автоматически создавать целевой каталог, если он еще не существует:
@Test
public void givenUsingApache_whenMovingFileApproach2_thenCorrect() throws IOException {
FileUtils.moveFileToDirectory(
FileUtils.getFile("src/test/resources/fileToMove.txt"),
FileUtils.getFile("src/main/resources/"), true);
}
6. Заключение
We looked at renaming in these code snippets, но перемещение, конечно же, одно и то же, только целевой каталог должен быть другим.
И вот, у вас это есть - 5 быстрых решений для перемещения файла в Java.