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

但是它不起作用(我不能影响'扩展变量),我将如何解决这个问题才能获取文件的扩展名?

非常感谢

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 回答