【问题标题】:Android - getFilesDir().lstFiles() returning null?Android - getFilesDir().lstFiles() 返回 null?
【发布时间】:2016-04-16 15:43:10
【问题描述】:

我想读出我应用的私有文件目录中每个文件的第一行。 我正在使用以下代码:

    String[] f ={};
    File[] files = con.getFilesDir().listFiles();
    for (int i = 0; i<=files.length-1; i++){
        try {
            FileInputStream in = con.openFileInput(files[i].getName());
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            f[i]=br.readLine();
            br.close();
            in.close();
        }catch(Exception e){
            Log.e("File input reading", e.getMessage());
        }
    }
    return f;

Logcat 总是说“E/File input reading﹕length=0; index=0”——表示文件数组的长度为0,因为listfiles()返回null,但这个目录下肯定有文件。为什么 listfiles() 不能识别它?


编辑: 我用这段代码解决了它:

public static String[] GetFiles(Context con){
    File[] files = con.getFilesDir().listFiles();
    String[] f = new String[files.length];
    for(int i=0; i<files.length; i++){
        f[i] = getFirstLine(files[i], con);
    }
    return f;
}

public static String getFirstLine(File f, Context con){
    String ret ="error";
    try {
        FileInputStream in = con.openFileInput(f.getName());
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        ret = br.readLine();
        br.close();
        in.close();
    }catch(Exception e){
        Log.e("File input reading", e.getMessage());
    }
    return ret;
}

它从应用程序的私有文件目录中的每个文件中读取第一行。

【问题讨论】:

    标签: java android file-handling


    【解决方案1】:

    因为 listfiles() 返回 null

    不,它没有。否则,在执行files.length 时,您将有一个NullPointerException

    Logcat 总是说“E/File input reading﹕length=0; index=0”

    如果您的Log 电话是:

    Log.e("SomeIdentifyingTag", "File input reading", e);
    

    然后,您将看到 Java 堆栈跟踪和异常的完整详细信息。

    这里有一个错误:

    f[i]=br.readLine();
    

    f 是一个零长度数组。你不能分配任何它的任何元素,因为它没有元素。如果您希望ffiles 具有相同数量的元素,则需要在初始化files 之后的某个时间将f 初始化为new String[files.length]

    另一个错误是您没有检查files[i] 是文件还是目录。 IIRC,listFiles() 可以返回目录,包括虚拟目录,如...

    【讨论】:

    • 感谢您的回答。我用你的提示进行数组初始化。您可以在上面看到我对我的解决方案的编辑。 (顺便说一句,我不需要检查它是文件还是目录,因为只有文件)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 2012-05-28
    • 2014-12-05
    • 2021-07-07
    • 2013-06-27
    • 1970-01-01
    相关资源
    最近更新 更多