1

私は最近、名前に特定のテキストが含まれている場合、それらの名前を別の名前に変更するフォルダ内のいくつかのファイル/ディレクトリを見つけるための Java ソフトウェアをいくつか作成しています。私Files.walkFileTreeはディレクトリをトラバーサルするために使用し、一致するファイル/ディレクトリが見つかった場合は、File.renameToメソッドを使用して名前を変更します。

しかし、ここで、1 つのサブディレクトリの名前が変更されていると、このサブディレクトリの下のすべての名前変更操作が失敗するという問題に遭遇しました。

このサブディレクトリが開いているとマークされているため、そのファイル/フォルダーを変更できないことが原因だと思います。それを解決するためのアイデアはありますか?

4

3 に答える 3

3

これは、最初にすべての名前を決定してから、ディレクトリに含まれるファイルの名前を変更する前にディレクトリの名前を変更した場合に発生します。

このあたりのいくつかは、最初にファイルの深さの名前を変更する (ファイルの名前を変更した後にディレクトリの名前を変更するだけ) か、ファイルのリストを作成するだけです。

于 2011-12-12T14:35:29.533 に答える
1

これは、ディレクトリの名前を「一番下から一番最後」に変更することで解決できる可能性があります。

于 2011-12-12T14:33:56.080 に答える
0

walkFileTree残念ながら、それは本来あるべきセマンティックです。NIO 2 の技術リーダーである Alan Bateman は次のように述べています。

walkFileTree ユーティリティ メソッドは、ディレクトリ ストリームから取得した反復子を使用する内部反復子です。これらの反復子は (DirectoryStream で) 「弱い一貫性」を持つように指定されており、ディレクトリが開かれた後にディレクトリへの更新が反映されない場合があります。...とにかく、違いの理由は、基礎となる実装が非常に異なるためです。

于 2011-12-12T14:51:07.073 に答える