我必须将SD卡中的文本文件放在一个文件夹中并显示它们 在textView中。我正在使用此代码
if(file!=null){
File list[] = file.listFiles();
Log.d("file size>>",""+file.length());
if(list!=null){
for( int i=0; i< list.length; i++)
{
Log.d(">>>>",""+list[i].getName());
if(list[i].isFile() && list[i].getName().endsWith(".txt")) {
myList.add(list[i]);
Log.d("myList size>>",""+myList.size());
try {
FileInputStream fIn = new FileInputStream(list[i]);
BufferedReader myReader = new BufferedReader(new InputStreamReader(fIn));
while ((aDataRow = myReader.readLine()) != null) {
aBuffer += aDataRow + "\n";
}
abc = aBuffer;
Log.d("log valuee>>",abc);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
abc是一个字符串变量,我在其中保存每个文件的值,但每次循环运行时都会打印重复数据。其他日志正在打印准确的数据
答案 0 :(得分:0)
abc
和aBuffer
永远不会被清除。
因此,每次循环运行时,它们都会被附加到。
例如,如果您的第一个文件包含&#34;快速棕色狐狸&#34;,则第二个文件包含&#34;跳过&#34;,第三个包含&#34;懒狗&#34;,你会得到
快速棕狐 快速的棕色狐狸跳过了 快速的棕色狐狸跳过懒狗
而不是
快速棕狐 跳过了 懒狗
解决方案只是在再次使用之前设置abc=""
或者也许aBuffer = ""
,取决于你打算留在那里。
正如@qbeck在评论中指出的那样,您可能希望使用StringBuilder
或StringBuffer
而不是String。由于您的缓冲区将包含整个文件,因此可能会影响性能。