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");
  }

folder は明らかにファイルがあるフォルダーの場所であり、元の文字列の部分文字列から "The_" または "The" という単語の先頭の 4 文字を引いたものです。

次に、同じフォルダー内のファイルの名前を、それ自体から部分文字列を除いた名前に変更しようとします。

このコードの結果、ファイルが消え、そのファイルの length() を呼び出すと、ファイル サイズが 0 としてリストされます。Windows エクスプローラーでファイルが見つかりませんが、HDD に余分なスペースがありません!

質問に移ります:

  1. これの何が問題なのですか?一時ファイルを別のフォルダーなどに配置する必要がありますか?
  2. Windows からファイルを解放して、HDD のスペースを永久に詰まらせないようにする方法はありますか?
  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に 1 回だけ割り当てる必要があります。parent

于 2012-07-29T17:09:03.370 に答える