所以我一直在用 Java 编写一个程序来组织我所有的文件。我从电影文件开始,因为这是我拥有的最多的文件,但我计划最终能够选中所有文件类型。
无论如何,在将所有文件移动到新文件夹时,我让 renameTo
工作正常。下一步是尝试按字母顺序排列文件。我也能正常工作,但显然我需要能够删除文章(即“the”、“a”、“an”)才能正确按字母顺序排列。我能够在我的 ArrayList 中很容易地做到这一点,然后决定实际重命名这些文件。
我做了一个 renameTo,以便将文件重命名为相同的文件名减去文章。我用过:
File newb = new File(folder+""+filelist[i].getName().substring(4));
if(filelist[i].renameTo(newb)){}
else{
System.out.println("FAILED");
}
其中 folder 显然是文件所在的文件夹位置,它是原始字符串的子字符串减去单词“The_”或“The”开头的 4 个字符。
然后它会尝试将同一文件夹中的文件重命名为自身减去子字符串。
此代码的结果是文件消失并且在调用该文件的 length() 时文件大小被列为 0。在 Windows 资源管理器中找不到该文件,但我的硬盘上没有额外空间!
现在回答问题:
- 这有什么问题?我应该将临时文件放入另一个文件夹还是什么?
- 有没有办法从 Windows 中释放文件,这样它们就不会永远阻塞我的硬盘空间?
- 您还有什么需要知道的吗?要添加吗?
最佳答案
我不确定发生了什么,但是通过附加字符串来构造文件名可能会导致问题。 (特别是,如果 folder
没有以路径分隔符结尾,您可能会在父文件夹中找到您移动的文件。这可以解释为什么文件在没有释放任何磁盘空间的情况下消失了。所以而不是例如,将 C:\movies\The_Sting.avi
重命名为 C:\movies\Sting.avi
,它最终变成了 C:\moviesSting.avi
.)
试试这个:
File parent = filelist[i].getParentFile();
String newName = filelist[i].getName().substring(4);
if (!filelist[i].renameTo(new File(parent, newName)) {
System.out.println("FAILED");
}
显然,如果 filelist
中的所有文件都来自同一个文件夹,那么您只需分配给 parent
一次(在开始循环之前)。
关于Java renameTo Files Showed 0 File Size 然后消失了......Windows仍然保留空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11711129/