1

所以我一直在用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");
  }

其中文件夹显然是文件所在的文件夹位置,它是原始字符串的子字符串减去单词“The_”或“The”开头的 4 个字符。

然后它尝试将同一文件夹中的文件重命名为自身减去子字符串。

此代码的结果是在调用该文件的 length() 时文件消失并且文件大小被列为 0。在 Windows 资源管理器中找不到该文件,但我的硬盘上没有多余的空间!

现在的问题:

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

1 回答 1

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一次(在开始循环之前)。

于 2012-07-29T17:09:03.370 回答