2013-07-26 54 views
-2

我试图在不知道文件扩展名的情况下获取文件实例。我试过此基础上另一种解决方案:没有文件扩展名的Java文件实例

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

在accept方法的第二个if中返回true。然后遍历返回的'String []'来获取每个文件名的扩展名。 –

回答

0

您正在运行成一个匿名内部类的方法不能在封闭范围的类修改局部变量的问题。 Java语言不允许它。您只能引用final的局部变量。 (在Java 8中,它不一定是作为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 = ... 
     } 
    });