如何在 Java 中将文件从一个位置移动到另一个位置?

如何将文件从一个位置移动到另一个位置?当我运行程序时,在该位置创建的任何文件都会自动移动到指定的位置。如何知道移动了哪个文件?

254791 次浏览

来自 Java IO 的 File.renameTo 可以用来在 Java 中移动文件。

myFile.renameTo(new File("/the/new/place/newName.file"));

File#renameTo does that (it can not only rename, but also move between directories, at least on the same file system).

重命名由这个抽象路径名表示的文件。

这个方法的行为的许多方面本质上是依赖于平台的: 重命名操作可能无法将一个文件从一个文件系统移动到另一个文件系统,它可能不是原子的,而且如果一个具有目标抽象路径名的文件已经存在,它可能无法成功。应该始终检查返回值,以确保重命名操作成功。

如果需要更全面的解决方案(比如在磁盘之间移动文件) ,请参阅 ApacheCommons FileUtils # moveFile

您可以为该任务执行一个外部工具(如 Windows 环境中的 copy) ,但是,为了保持代码的可移植性,通常的方法是:

  1. 将源文件读入内存
  2. 将内容写入新位置的文件中
  3. 删除源文件

只要源和目标位置在同一个音量上,File#renameTo就可以工作。个人而言,我会避免使用它来移动文件到不同的文件夹。

要移动文件,还可以使用 JakartaCommons IOsMoveFile

出现错误时,它会抛出 IOException,所以当没有抛出异常时,您就知道文件被移动了。

在 Java7或更新的版本中,您可以使用 Files.move(from, to, CopyOption... options)

例如。

Files.move(Paths.get("/foo.txt"), Paths.get("bar.txt"), StandardCopyOption.REPLACE_EXISTING);

有关更多细节,请参见 文件文档

只需添加源和目标文件夹路径。

它将把所有文件和文件夹从源文件夹移动到 destination folder.

    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");
}

试试这个:-

  boolean success = file.renameTo(new File(Destdir, file.getName()));
Files.move(source, target, REPLACE_EXISTING);

您可以使用 Files对象

Read more about 文件

Wrote this method to do this very thing on my own project only with the replace file if existing logic in it.

// 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;
}
}

爪哇6

public boolean moveFile(String sourcePath, String targetPath) {


File fileToMove = new File(sourcePath);


return fileToMove.renameTo(new File(targetPath));
}

Java7(使用 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;
}

请试试这个。

 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;
}