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

标签 java windows file

所以我一直在用 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/

相关文章:

java - IntelliJ IDEA 创建错误的 Maven 快照依赖项

windows - 将 Windows 消息 ID 转换为文本

windows - Qt Creator "too big"在 3840x2160 和 Windows 10 上缩放 150%

c++ - 有没有办法从服务中运行可执行文件?

ios - NSInvalidUnarchiveOperationException 仅在 iOS 扩展中引发,而不是在主应用程序中引发

python - 如何检查路径是现有的常规文件而不是目录?

javascript - 使用 PHP 为目录中的所有 JavaScript 文件递归生成脚本标签

java - 使用用户输入代码的随机数生成器无法正常工作

java - DROOLS:根据 >、< 或 = 创建条件很容易,但是我们如何为人类可读的规则创建条件呢?

java - 如何使用证书过期的旧 Java 小程序?