我一直在进行一个显示文本文件的简单目录扫描,然后将输出打印到文本区域。如果我尝试再次使用它,它会如何重复输出 下面是公共阵列:
public ArrayList<File> getfile(File dir) {
File listFile[] = dir.listFiles();
if (listFile != null && listFile.length > 0) {
for (int i = 0; i < listFile.length; i++) {
if (listFile[i].isDirectory()) {
fileList.add(listFile[i]);
getfile(listFile[i]);
} else {
if (listFile[i].getName().endsWith(".txt")) {
fileList.add(listFile[i]);
}
}
}
}
return fileList;
}
这是onclick按钮代码
File root = new File(Environment.getExternalStorageDirectory() + File.separator + user_inputfilename); //"searches what the userinput"
getfile(root);
for (int i = 0; i < fileList.size(); i++) {
newText.append(fileList.get(i).getName()+"\n");
}
我真的不知道我做错了什么?有没有办法清除阵列?任何帮助将不胜感激。谢谢
答案 0 :(得分:1)
您似乎也在子目录中以递归方式查找?无论如何,试试这个。您致电getFiles(dir)
的地方改为fileList = getTextFilesRecursively(dir)
:
public ArrayList<File> getTextFilesRecursively(File dir) {
return getTextFilesRecursively(dir, new ArrayList<>());
}
private ArrayList<File> getTextFilesRecursively(File dir, ArrayList<File> textFiles) {
File[] allFilesAndFoldersInDir = dir.listFiles();
if(textFiles == null) {
textFiles = new ArrayList<>();
}
if (allFilesAndFoldersInDir != null && allFilesAndFoldersInDir.length > 0) {
for (File fileOrFolderInDir : allFilesAndFoldersInDir) {
if (fileOrFolderInDir.isDirectory()) {
getTextFilesRecursively(fileOrFolderInDir, textFiles);
} else if (fileOrFolderInDir.getName().endsWith(".txt")) {
textFiles.add(fileOrFolderInDir);
}
}
}
return textFiles;
}
我认为您的潜在问题是fileList.add(listFile[i]);
,因为fileList
的范围在方法之外,并且正在重复使用并附加到。{1}}。现在我们使用textFiles
代替,每次首次调用方法时都应为空。更简单的解决方法是在致电fileList = new ArrayList<>()
之前立即执行getFiles(dir);
,但上面的代码要好得多。