java renameTo方法不起作用

时间:2012-07-19 22:35:09

标签: java file-rename

我知道这可能已经回答了一百万次了,但我所看到的一切都没有帮助我。这是我的代码:

for(File g: f.listFiles()){
    for(File h : g.listFiles()){
        try{
            Scanner s = new Scanner(h);
            String timestamp = s.next().split("[?]")[4];
            File z = new File(h.getAbsolutePath().split("[.]")[0] + timestamp + h.getAbsolutePath().split("[.]")[1]);
            boolean q = h.renameTo(z);
        }catch(Exception e){

        }
    }
}

我已经检查过文件z是否存在而且不存在。我检查过文件h是否存在而且确实存在。我已经仔细检查过h是绝对路径。如果我打印z的绝对路径,我会得到正确的路径。 f中的目录或g中的文件都没有打开。由h表示的文件未打开。可能会在文件中设置一些标志或窗口不允许我的程序重命名它?

3 个答案:

答案 0 :(得分:3)

我的猜测是你遇到了类似问题File deletion/moving failing

尝试将FileinputStream用于扫描仪

FileInputStream fin = new FileInputStream(h);
fin.open()
Scanner s = new Scanner(fin);
//do work
fin.close()

并在重命名之前关闭流

答案 1 :(得分:2)

renameTo的行为因平台而异。在一个平台上成功的操作可能在另一个平台上失败例如,在我的本地开发工作站(OS X)上,一切都按预期工作。在生产系统(Solaris)上,renameTo始终失败。当文件位于不同的分区时,我终于确定它失败了。显然情况并非如此,但它说明该方法可能会以意想不到的方式运行。

要获得一致的行为,请将数据复制到新文件,然后删除原始文件。

答案 2 :(得分:1)

我有一个几乎相同的问题。一些重命名案例成功,一些失败。对于那些失败的情况,我发现,源文件路径和目标文件路径不在同一文件系统中。在我的情况下,NTFS安装了另一个文件系统,目标文件将被移动到该文件系统。由于重命名功能的原始目的只是重命名一个名称,而不是移动相关文件的数据。如果源文件路径和目标文件路径都在不同的文件系统中,则某些版本的JVM将在某些平台上失败。实际上,它是java.io中的一个错误,Solaris已经在新版本中修复了这个错误。 祝你好运!

HappyForever,