-2

ファイル拡張子を知らずに File インスタンスを取得しようとしています。別の解決策に基づいてこれを試しました:

String extension = null;
String[] myFiles = dir.list(new FilenameFilter() {
    public boolean accept(File directory, String fileName) {
        if(fileName.lastIndexOf(".")==-1) return false;
        if((fileName.substring(0, fileName.lastIndexOf("."))).equals(storageId))
            extension = fileName.substring(fileName.lastIndexOf("."), fileName.length());
    }
});

ただし、機能しません ('extension 変数に影響を与えることはできません)。ファイルの拡張子を取得するには、どうすればこれを回避できますか?

どうもありがとうございました

4

1 に答える 1

0

匿名の内部クラスのメソッドが、スコープを囲むクラスのローカル変数を変更できないという問題が発生しています。Java 言語はそれを許可しません。であるローカル変数のみを参照できますfinal(Java 8 では、final として宣言する必要はありません。匿名クラスがインスタンス化される時点で実質的に final である必要があるだけです。)

これを回避するには、いくつかの方法があります。たとえば、次のようになります。

// #1
final String[] extension = new String[1];
String[] myFiles = dir.list(new FilenameFilter() {
    public boolean accept(File directory, String fileName) {
        ...
        extension[0] = ...
    }
});


// #2
final MyCustomStringHolder extension = ...
String[] myFiles = dir.list(new FilenameFilter() {
    public boolean accept(File directory, String fileName) {
        ...
        extension.setValue(...);
    }
});

// #3
private String extension = null;
public void method() {
    String[] myFiles = dir.list(new FilenameFilter() {
        public boolean accept(File directory, String fileName) {
            ...
            extension = ...
        }
    });
于 2013-07-29T03:18:28.983 に答える