Как переместить файл из одного места в другое в Java?
95
Как переместить файл из одного места в другое? Когда я запускаю свою программу, любой файл, созданный в этом месте, автоматически перемещается в указанное место. Как узнать, какой файл перемещен?
Сначала вы спрашиваете, как переместить один файл, затем говорите, что некоторые файлы перемещаются автоматически. Не могли бы вы прояснить свой вопрос?
Это делает файл # renameTo (он может не только переименовывать, но и перемещаться между каталогами, по крайней мере, в одной файловой системе).
Переименовывает файл, обозначенный этим абстрактным путем.
Многие аспекты поведения этого метода по своей сути зависят от платформы: операция переименования может не иметь возможности переместить файл из одной файловой системы в другую, она может быть не атомарной и может не завершиться успешно, если файл с конечным абстрактным путем уже существует. Возвращаемое значение всегда следует проверять, чтобы убедиться, что операция переименования прошла успешно.
Если вам нужно более комплексное решение (например, вы хотите переместить файл между дисками), посмотрите Apache Commons FileUtils # moveFile
myFile.renameTo (новый файл ("/ the / new / place / newname.file"));
djangofan 01
4
Да не просто дать новый родительский каталог. И убедитесь, что путь туда уже существует.
Тило
2
Обратите внимание, что myFileпуть к объекту не обновляется этой командой. Таким образом, он будет указывать на файл, которого больше нет.
Евгений Сергеев
1
@Sulemankhan - да, тоже удаляет файл. Он действительно перемещает его в файловую систему
Леоле
2
@JulienKronegg: Вероятно, это зависит от вашей ОС / файловой системы. Я думаю, что в Linux вы можете перемещать (или удалять) файлы, которые в настоящее время открыты (и продолжать получать к ним доступ через существующий дескриптор файла), но не в Windows.
Тило
63
С Java 7 или новее вы можете использовать Files.move(from, to, CopyOption... options).
Он переместит все файлы и папки из исходной папки в целевую.
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будет работать, пока исходное и целевое расположение находятся на одном томе. Лично я бы не стал использовать его для перемещения файлов в разные папки.
Написал этот метод, чтобы сделать именно это в моем собственном проекте, только с файлом замены, если в нем есть логика.
// we use the older file i/o operations for this rather than the newer jdk7+ Files.move() operationprivatebooleanmoveFileToDirectory(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");
returnfalse;
}
}
Ответы:
myFile.renameTo(new File("/the/new/place/newName.file"));
Это делает файл # renameTo (он может не только переименовывать, но и перемещаться между каталогами, по крайней мере, в одной файловой системе).
Если вам нужно более комплексное решение (например, вы хотите переместить файл между дисками), посмотрите Apache Commons FileUtils # moveFile
источник
myFile
путь к объекту не обновляется этой командой. Таким образом, он будет указывать на файл, которого больше нет.С Java 7 или новее вы можете использовать
Files.move(from, to, CopyOption... options)
.Например
Files.move(Paths.get("/foo.txt"), Paths.get("bar.txt"), StandardCopyOption.REPLACE_EXISTING);
См. Документацию по файлам для более подробной информации.
источник
Чтобы переместить файл, вы также можете использовать Jakarta Commons IOs IOs FileUtils.moveFile
При ошибке он выдает
IOException
, поэтому, когда исключение не возникает, вы знаете, что файл был перемещен.источник
File.renameTo
from Java IO можно использовать для перемещения файла в Java. Также см. Этот вопрос SO .источник
Просто добавьте пути к исходной и целевой папкам.
Он переместит все файлы и папки из исходной папки в целевую.
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"); }
источник
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 fileMoved = true; try { Files.move(Paths.get(sourcePath), Paths.get(targetPath), StandardCopyOption.REPLACE_EXISTING); } catch (Exception e) { fileMoved = false; e.printStackTrace(); } return fileMoved; }
источник
Вы можете выполнить внешний инструмент для этой задачи (например,
copy
в среде Windows), но для сохранения переносимости кода общий подход заключается в следующем:File#renameTo
будет работать, пока исходное и целевое расположение находятся на одном томе. Лично я бы не стал использовать его для перемещения файлов в разные папки.источник
Попробуй это :-
boolean success = file.renameTo(new File(Destdir, file.getName()));
источник
Вы можете использовать
Files
объектисточник
Написал этот метод, чтобы сделать именно это в моем собственном проекте, только с файлом замены, если в нем есть логика.
// 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; } }
источник
Пожалуйста, попробуйте это.
private boolean filemovetoanotherfolder(String sourcefolder, String destinationfolder, String filename) { boolean ismove = false; InputStream inStream = null; OutputStream outStream = null; try { File afile = new File(sourcefolder + filename); File bfile = new File(destinationfolder + filename); inStream = new FileInputStream(afile); outStream = new FileOutputStream(bfile); byte[] buffer = new byte[1024 * 4]; int length; // copy the file content in bytes while ((length = inStream.read(buffer)) > 0) { outStream.write(buffer, 0, length); } // delete the original file afile.delete(); ismove = true; System.out.println("File is copied successful!"); } catch (IOException e) { e.printStackTrace(); }finally{ inStream.close(); outStream.close(); } return ismove; }
источник
close
инструкции были вfinally
блоке или если бы он использовал блок try-with-resources.Вы можете попробовать это .. чистое решение
источник
javax.script.ScriptException: javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: REPLACE_EXISTING