首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当生成的文件位于另一个文件系统上时,Java无法移动(重命名)文件

当生成的文件位于另一个文件系统上时,Java无法移动(重命名)文件
EN

Stack Overflow用户
提问于 2012-05-10 17:59:46
回答 4查看 10K关注 0票数 11

我们在尝试将文件从一个目录移动到另一个目录时出错的程序。经过多次调试后,我编写了一个小的实用程序,将文件从一个目录移动到另一个目录(下面的代码),从而定位了错误。事实证明,虽然在本地文件系统上移动文件可以很好地工作,但尝试将文件移动到另一个文件系统会失败。

为什么会这样呢?这个问题可能是特定于平台的--如果这很重要的话,我们在ext3上运行Linux。

第二个问题:我是否应该使用File类的renameTo()方法以外的其他方法?这似乎只适用于本地文件系统。

测试(以root用户身份运行):

代码语言:javascript
复制
touch /tmp/test/afile

java FileMover /tmp/test/afile /root/
The file move was successful

touch /tmp/test/afile

java FileMover /tmp/test/afile /some_other_disk/
The file move was erroneous

代码:

代码语言:javascript
复制
import java.io.File;

public class FileMover {
    public static void main(String arguments[] ) throws Exception {
        boolean success;
        File file = new File(arguments[0]);
        File destinationDir = new File(arguments[1]);
        File destinationFile = new File(destinationDir,file.getName() );
        success = file.renameTo(destinationFile);
        System.out.println("The file move was " + (success?"successful":"erroneous"));
    }
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-10 18:01:49

Java 7及更高版本

使用Files.move(Path source, Path target, CopyOption... opts)

请注意,在文件系统之间移动文件时,不能提供ATOMIC_MOVE选项。

Java 6及更低版本

来自File.renameTo的文档

...重命名操作可能无法将文件从一个文件系统移动到另一个文件系统...

显而易见的解决办法是通过打开一个新文件“手动”复制该文件,将内容写入该文件,然后删除旧文件。

您还可以尝试Apache Commons中的FileUtils.moveFile方法。

票数 19
EN

Stack Overflow用户

发布于 2012-05-10 18:02:25

Javadoc拯救了我们:

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

请注意,Files类定义了以独立于平台的方式移动或重命名文件的move方法。

票数 6
EN

Stack Overflow用户

发布于 2012-05-10 18:08:25

从文档中:

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

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

如果你想在不同文件系统之间移动文件,你可以使用Apache的moveFile

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10531682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档