当前位置: 首页 > 面试题库 >

java file.renameTo()确实重命名文件,但返回false。为什么?

阎宾实
2023-03-14
问题内容

问题是我需要先移动文件,然后其余逻辑才能工作,因此当方法返回false时,我将停止执行

但是,当我在Windows资源管理器中检查文件时,它具有一个新名称,并且已移动。

只是好奇为什么会这样。

这是一些我刚刚尝试重新创建问题的示例代码。这几乎是同一件事,并且工作正常。

File testfile = new File("TestFile");

    if(!testfile.exists()){

        testfile.mkdirs();

    }

    File sample = new File("sample.txt");

    if(sample.exists()){

        boolean success = sample.renameTo(new File(testfile.getPath() + "\\" + sample.getName()));

        if(success){

            System.out.println("Moved");

        }
        else{

            System.out.println("Failed");

        }

    }

编辑:解决了。很抱歉浪费大家的时间这么愚蠢的事情。但是,我真的不认为如果没有发布此帖子,我不会对此进行追踪。

解决的办法是我实际上遍历了几个文件来移动。当输出说失败时,程序停止运行,当我在资源管理器中查看时,实际上仅移动了第一个文件,因此我认为它正在移动,然后返回false。但是,问题是我使用了错误的变量作为索引,所以发生的事情是它确实成功地将文件移到了索引0中,然后在循环重复时索引没有增加,因此尝试再次移动索引0并因此失败了。

就像我说的那样,非常愚蠢,但感谢您的支持。


问题答案:

File.renameTo()看来Java 是有问题的,尤其是在Windows上。如API文档所述:

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

您可以使用apache.commons.io库,该库包括JDK
7中FileUtils.moveFile()Files.move()方法,也可以包括该方法。



 类似资料:
  • 我见过几个类似的问题,但没有一个答案在我的情况下工作,除了它可能与权限有关。 Apache提供的PHP脚本告诉我, 。我无法(用户不可用)。 我的脚本在中。DBFILE是它的某个地方(我尝试了,都在中,但也没有运气)。 没有安全模式,新安装的PHP5.4,CentOS7。 请有人给我一个线索,至少帮助调试它。比如:我如何检查我的文件是否可以从apache/我的php脚本中读取,而不运行脚本本身?如

  • 问题内容: 我正在使用a 检查我的哈希密码。我有PHP 5.5: 我上车了。我已经检查了posts的值和mysql user_password_hash返回。 我不知道为什么它返回假 有任何想法吗? 问题答案: 手册中的列长度可能是问题所在: 建议将结果存储在可扩展超过60个字符的数据库列中(255个字符是一个不错的选择)。 链接

  • 我的主机上有一个图像文件。 FileZilla表示其已获得许可 然而: 返回false 可能的问题来源: PHP可能由于某些原因读取权限错误-PHP手册中读取文件权限的示例(函数)说明fileperms是 注意!:文件可以从Web浏览器访问-如果我将文件路径打印为

  • 问题内容: 我刚刚研究OCPJP问题,发现了这个奇怪的代码: 运行代码时,我得到: 当我们比较看起来彼此相同的两件事时,输出如何?什么NaN意思 问题答案: 溢出的操作将生成有符号无穷大,下溢的操作将生成非规范化的值或有符号的零,而数学上没有确定结果的操作将生成NaN。将NaN作为操作数的所有数值运算都会产生NaN。如前所述,NaN是无序的,因此涉及一个或两个NaN返回的数值比较操作以及涉及NaN

  • 问题内容: 命名函数的返回参数有什么好处? 问题答案: 命名它们有一些好处: 它用作文档。 它们会自动声明并初始化为零值。 如果您有多个返回站点,则更改函数的返回值并不需要全部更改,因为它只会显示“ return”。 还有缺点,主要是很容易通过声明相同名称的变量来意外地遮盖它们。 有效的Go中有一个关于命名结果参数的部分: 可以给Go函数的返回或结果“参数”指定名称,并将其用作常规变量,就像传入参

  • 在WordPress主题中,当一个联系人表单完成时,一条消息会写在页面上,但不会写在我想要的位置。但是当在PHP代码中更改消息的位置时,联系人表单中的段落(写在文章中)不再显示。事实上,我认为方法返回false,因此不会调用方法。 以下是原始代码: 我希望它是这样的: 如你所见,我只更改了确认消息的位置。但是在第二种方式中,具有的条件似乎不是真的,因为我在文章中写的文本没有显示出来。 有人能帮我解