gpt4 book ai didi

Java renameTo Files Showed 0 File Size 然后消失了......Windows仍然保留空间

转载 作者:可可西里 更新时间:2023-11-01 11:35:40 29 4
gpt4 key购买 nike

所以我一直在用 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 资源管理器中找不到该文件,但我的硬盘上没有额外空间!

现在回答问题:

  1. 这有什么问题?我应该将临时文件放入另一个文件夹还是什么?
  2. 有没有办法从 Windows 中释放文件,这样它们就不会永远阻塞我的硬盘空间?
  3. 您还有什么需要知道的吗?要添加吗?

最佳答案

我不确定发生了什么,但是通过附加字符串来构造文件名可能会导致问题。 (特别是,如果 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com