我想在我应用的私人文件目录中读出每个文件的第一行。 我使用以下代码:
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;
}
它从应用程序的私人文件目录中读取每个文件的第一行。
答案 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()
可以返回目录,包括.
和..
等虚拟目录。