Android - getFilesDir()。lstFiles()返回null?

时间:2016-04-16 15:43:11

标签: java android file-handling

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

    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总是说&#34; E / File输入读数:length = 0;索引= 0&#34; - 表示files数组的长度为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;
}

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

1 个答案:

答案 0 :(得分:0)

  

因为listfiles()返回null

不,它没有。否则,执行NullPointerException时会有files.length

  

Logcat总是说“E / File输入读数:length = 0; index = 0”

如果您的Log电话是:

,这会有所帮助
Log.e("SomeIdentifyingTag", "File input reading", e);

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

这里有一个错误:

f[i]=br.readLine();

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

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