3

不要な文字を削除するために、フォルダーのリストの名前を変更できるようにしたいと考えています (たとえば、ドットとダブル スペースは 1 つのスペースにする必要があります)。

GUI のボタンをクリックすると、正しい形式の名前が表示されたメッセージ ボックスが表示されます。これは、形式が正しく、関数が呼び出されたことを示します。作成したテスト フォルダーを見ると、名前が変更されていません (更新しても)。ハードコードされた文字列を使用しても機能しません。

私は何を見落としていますか?

public void cleanFormat() {
    for (int i = 0; i < directories.size(); i++) {
        File currentDirectory = directories.get(i);
        for (File currentFile : currentDirectory.listFiles()) {
            String formattedName = "";
            formattedName = currentFile.getName().replace(".", " ");
            formattedName = formattedName.replace("  ", " ");
            currentFile.renameTo(new File(formattedName));
            JOptionPane.showMessageDialog(null, formattedName);
        }
    }
}
4

4 に答える 4

7

将来のブラウザー向け: これは、Assylias のコメントで修正されました。以下に、それを修正した最終的なコードを示します。

public void cleanFormat() {
    for (int i = 0; i < directories.size(); i++) {
        File currentDirectory = directories.get(i);
        for (File currentFile : currentDirectory.listFiles()) {
            String formattedName = "";
            formattedName = currentFile.getName().replace(".", " ");
            formattedName = formattedName.replace("  ", " ");
            Path source = currentFile.toPath();
            try {
                Files.move(source, source.resolveSibling(formattedName));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
于 2012-12-06T21:29:08.823 に答える
0

まずFile.renameTo、同じファイルシステム上のファイルの名前を変更しようとしています。

以下はJavaドキュメントからのものです

Many aspects of the behavior of this method are inherently platform-dependent: 
The rename operation might not be able to move a file from one filesystem to 
another, it might not be atomic, and it might not succeed if a file with the 
destination abstract pathname already exists.
于 2012-12-06T21:18:34.003 に答える
0

まず、戻り値を確認します。名前の変更が成功した場合、File.renameTo は true を返します。それ以外の場合は false。たとえば、Windows では、ファイルの名前を変更したり、ファイルを c: から d: に移動したりすることはできません。そして最も重要なのは、代わりに Java 7 の java.nio.file.Files.move を使用することです。

于 2012-12-06T21:23:30.417 に答える
0

getName() を呼び出すと、ファイルの名前だけが返され、ディレクトリ情報は返されません。そのため、ファイルの名前を別のディレクトリに変更しようとしている可能性があります。

名前を変更するために渡すファイルオブジェクトに、含まれているディレクトリを追加してみてください

currentFile.renameTo(new File(currentDirectory, formattedName));

また、他の人が言ったように、renameTo の戻り値を確認する必要がありますが、これはおそらく false です。または、Files クラスの新しいメソッドを使用して、かなり有益な IOExceptions をスローすることがわかりました。

于 2012-12-06T21:27:18.677 に答える