В Java мы можем использовать NIO Files.move(исходный, целевой)
чтобы переименовать или переместить файл.
import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; //... Path source = Paths.get("/home/mkyong/newfolder/test1.txt"); Path target = Paths.get("/home/mkyong/newfolder/test2.txt"); try{ Files.move(source, target); } catch (IOException e) { e.printStackTrace(); }
1. Переименуйте файл в том же каталоге.
1.1 В этом примере переименовывается файл в том же каталоге, сохраняя то же имя файла.
- Переименуйте файл из этого
/home/mkyong/Переименуйте файл из этого
- /home/mkyong/
К этому
Path source = Paths.get("/home/mkyong/hello.txt"); try{ // rename a file in the same directory Files.move(source, source.resolveSibling("newName.txt")); } catch (IOException e) { e.printStackTrace(); }
1.2 Если целевой файл существует, то Files.move
вызывает Исключение FileAlreadyExistsException
.
java.nio.file.FileAlreadyExistsException: /home/mkyong/newName.txt at java.base/sun.nio.fs.UnixCopyFile.move(UnixCopyFile.java:450) at java.base/sun.nio.fs.UnixFileSystemProvider.move(UnixFileSystemProvider.java:267) at java.base/java.nio.file.Files.move(Files.java:1421) at com.mkyong.io.file.FileRename.main(FileRename.java:26)
1.3 Если указан параметр REPLACE_EXISTING
и целевой файл существует, Files.move
заменит его.
import java.nio.file.StandardCopyOption; Files.move(source, source.resolveSibling("newName.txt"), StandardCopyOption.REPLACE_EXISTING);
2. Переместите файл в новый каталог.
2.1 В этом примере файл перемещается в новый каталог, сохраняя то же имя файла. Если целевой файл существует, замените его.
- Переместить файл из этого
/home/mkyong/hello.txt
- К этому
/home/mkyong/newfolder/hello.txt
Path source = Paths.get("/home/mkyong/hello.txt"); Path newDir = Paths.get("/home/mkyong/newfolder/"); //create the target directories, if directory exits, no effect Files.createDirectories(newDir); Files.move(source, newDir.resolve(source.getFileName()), StandardCopyOption.REPLACE_EXISTING);
2.2 Если целевой каталог не существует, Files.move
вызывает Исключение NoSuchFileException
.
java.nio.file.NoSuchFileException: /home/mkyong/hello.txt -> /home/mkyong/newfolder/hello2.txt at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92) at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111) at java.base/sun.nio.fs.UnixCopyFile.move(UnixCopyFile.java:478) at java.base/sun.nio.fs.UnixFileSystemProvider.move(UnixFileSystemProvider.java:267) at java.base/java.nio.file.Files.move(Files.java:1421) at com.mkyong.io.file.FileRename.main(FileRename.java:23)
3. Переместить файл – Apache Commons IO
3.1 Апач FileUtils.MoveFile
использует механизм “копировать и удалять” для переименования или перемещения файла. Кроме того, он провел большую проверку и гарантировал, что будет выдано правильное исключение, надежное решение.
commons-io commons-io 2.7
import org.apache.commons.io.FileUtils; //... File source = new File("/home/mkyong/hello.txt"); File target = new File("/home/mkyong/newfolder/hello2.txt"); try { FileUtils.moveFile(source, target); } catch (IOException e) { e.printStackTrace(); }
3.2 Если целевой файл существует, он вызывает Исключение FileExistsException
.
org.apache.commons.io.FileExistsException: Destination '/home/mkyong/newfolder/hello2.txt' already exists at org.apache.commons.io.FileUtils.moveFile(FileUtils.java:2012) at com.mkyong.io.file.FileRename.main(FileRename.java:39)
3.3 Если целевой каталог не существует, создайте его.
4. 3.3 Если целевой каталог не существует, создайте его. (Устаревший ввод-вывод)
Устаревший IO Файл.renameTo()
ненадежен, не рекомендуется использовать, прочитайте документацию по api .
Если File.renameTo()
не удалось переименовать или переместить файл, он вернет значение false, без исключения, часто, мы понятия не имеем, что пошло не так.
Скачать Исходный Код
$клон git $клон git
$cd java-ввод-вывод
Рекомендации
- Перемещение файла или каталога
- NIO Файлы JavaDoc
- Устаревший файл JavaDoc
- Файловые файлы Apache javadoc
Оригинал: “https://mkyong.com/java/how-to-rename-file-in-java/”