File.renameTo() 返回true,但文件未被重命名。

8

我正在尝试为我的音频录制设备创建一个文件,但这个文件总是被赋予一个随机的名称。因为这很难处理,我希望在文件被创建后用一个更有意义的名称对其进行重命名。

然而,即使renameTo返回true,文件也没有被重命名。

我做错了什么吗?

outfile = File.createTempFile(amount + "_alarmsave", ".3gp",
                    storageDir);

            System.out.println("Old file: "+outfile.getAbsolutePath());

            File newFile = new File(outfile.getParent(), "alarmsave_" + amount + ".3gp");

            System.out.println("new file: "+newFile.getAbsolutePath());

            if(outfile.renameTo(newFile)){
                System.out.println("Succes! Name changed to: " + outfile.getName());
            }else{
                System.out.println("failed");
            }

LogCat输出:

01-13 18:27:40.264: I/System.out(22913): Old file: /mnt/sdcard/Personal Alarm/13_alarmsave1623959934.3gp
01-13 18:27:40.264: I/System.out(22913): new file: /mnt/sdcard/Personal Alarm/alarmsave_13.3gp
01-13 18:27:40.284: I/System.out(22913): Succes! Name changed to: 13_alarmsave1623959934.3gp
1个回答

20

RenameTo 方法重命名实际的文件,它不会更改 File 对象。如果您调用了.exists(),您会发现新文件存在,旧文件不存在。

这是因为File类表示的是抽象路径,而不是文件系统上的实际文件。其想法是File.renameTo给定路径上的文件系统条目重新命名;它不会改变路径本身。


那个……嗯,值得思考。 奇怪的是对象本身的名称并没有改变。不过你说得对,在文件系统中名称确实发生了变化。非常感谢! - Sander van't Veer
那么,我该如何更改实际文件的名称呢?当我打印新文件路径时,我获得了新路径,但是文件名没有改变。有什么想法吗? - Abdellah Benhammou
renameTo 方法会更改实际文件的名称,但不会更改 File 对象的名称。 - Joni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接