Как переместить файл из одного места в другое в Java?
Как переместить файл из одного места в другое? Когда я запускаю свою программу, любой файл, созданный в этом месте, автоматически перемещается в указанное место. Как узнать, какой файл перемещен?
спасибо заранее!
10 ответов
myFile.renameTo(new File("/the/new/place/newName.file"));
файл#renameTo делает это (он может не только переименовывать, но и перемещаться между каталогами, по крайней мере, в той же файловой системе).
переименовывает файл, обозначенный этим абстрактным путем.
многие аспекты поведения этого метода по своей сути зависят от платформы: операция переименования может быть не в состоянии переместить файл из одной файловой системы в другую, он может не быть атомарным, и это не может быть успешным, если файл с абстрактный путь назначения уже существует. Возвращаемое значение всегда следует проверять, чтобы убедиться в успешности операции переименования.
Если вам нужно более комплексное решение (например, для перемещения файла между дисками), посмотрите на Apache Commons FileUtils#moveFile
С Java 7 или новее, вы можете использовать Files.move(from, to, CopyOption... options)
.
Э. Г.
Files.move(Paths.get("/foo.txt"), Paths.get("bar.txt"), StandardCopyOption.REPLACE_EXISTING);
посмотреть файлы документация для более подробной информации
для перемещения файла вы также можете использовать Jakarta Commons IOs пакета fileutils.moveFile
при ошибке он выдает IOException
, поэтому, когда исключение не возникает, вы знаете, что файл был перемещен.
File.renameTo
из Java IO можно использовать для перемещения файла в Java. Также смотрите это так вопрос.
просто добавьте пути к исходной и целевой папкам.
он будет перемещать все файлы и папки из исходной папки в папка назначения.
File destinationFolder = new File("");
File sourceFolder = new File("");
if (!destinationFolder.exists())
{
destinationFolder.mkdirs();
}
// Check weather source exists and it is folder.
if (sourceFolder.exists() && sourceFolder.isDirectory())
{
// Get list of the files and iterate over them
File[] listOfFiles = sourceFolder.listFiles();
if (listOfFiles != null)
{
for (File child : listOfFiles )
{
// Move files to destination folder
child.renameTo(new File(destinationFolder + "\" + child.getName()));
}
// Add if you want to delete the source folder
sourceFolder.delete();
}
}
else
{
System.out.println(sourceFolder + " Folder does not exists");
}
можно выполнить внешний инструмент для этой задачи (например,copy
в средах windows), но, чтобы сохранить переносимость кода, общий подход заключается в следующем:
- чтение исходного файла в память
- запись содержимого в файл в новом месте
- удалить файл источник
File#renameTo
будет работать до тех пор, пока источник и целевое местоположение находятся на одном томе. Лично я бы избегал использовать его для перемещения файлов в разные папки.
Java 6
public boolean moveFile(String sourcePath, String targetPath) {
File fileToMove = new File(sourcePath);
return fileToMove.renameTo(new File(targetPath));
}
Java 7 (используя NIO)
public boolean moveFile(String sourcePath, String targetPath) {
boolean flag = true;
try {
Files.move(Paths.get(sourcePath), Paths.get(targetPath), StandardCopyOption.REPLACE_EXISTING);
} catch (Exception e) {
flag = false;
e.printStackTrace();
}
return flag;
}
написал этот метод, чтобы сделать это в моем собственном проекте только с файлом замены, если в нем есть логика.
// we use the older file i/o operations for this rather than the newer jdk7+ Files.move() operation
private boolean moveFileToDirectory(File sourceFile, String targetPath) {
File tDir = new File(targetPath);
if (tDir.exists()) {
String newFilePath = targetPath+File.separator+sourceFile.getName();
File movedFile = new File(newFilePath);
if (movedFile.exists())
movedFile.delete();
return sourceFile.renameTo(new File(newFilePath));
} else {
LOG.warn("unable to move file "+sourceFile.getName()+" to directory "+targetPath+" -> target directory does not exist");
return false;
}
}