【问题标题】:Java file instance without file extension没有文件扩展名的 Java 文件实例
【发布时间】:2013-07-26 15:23:52
【问题描述】:

我试图在不知道文件扩展名的情况下获取 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 变量),我该如何解决这个问题才能获取文件的扩展名?

非常感谢

【问题讨论】:

  • accept 方法的第二个if 中返回true。然后遍历返回的String[],得到每个文件名的扩展名。

标签: java file directory


【解决方案1】:

您遇到了匿名内部类的方法无法修改封闭范围内的类的局部变量的问题。 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 = ...
        }
    });

【讨论】:

    猜你喜欢
    • 2015-08-08
    • 2016-12-24
    • 2012-12-24
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 2018-08-06
    相关资源
    最近更新 更多