【发布时间】:2016-04-04 21:58:58
【问题描述】:
我的 ArrayList 面临 3 个问题。它从我的 sdcard 中读取没有任何问题的文件。
文件具有以下结构:
1.3.2016.csv
2.3.2016.csv
29.2.2016.csv
30.2.2016.csv
4.2.2016.csv
这是我从 sdcard 读取文件的方法:
private List<String> getList(File parentDir) {
ArrayList<String> inFiles = new ArrayList<String>();
String[] fileNames = parentDir.list();
for (String fileName : fileNames) {
if (fileName.toLowerCase().endsWith(".csv")) {
inFiles.add(removeLastChar(fileName));
} else {
File file = new File(File.separator + fileName + ".csv");
if (file.isDirectory()) {
inFiles.addAll(getList(((file))));
}
}
}
itemTexte.addAll(Arrays.asList(fileNames));
return inFiles;
}
private static String removeLastChar(String str) {
return str.substring(0,str.length()-4);
}
这是我从 onCreate 中调用的内容:
List<String> files = getList(new File(Environment.getExternalStorageDirectory() + File.separator + "Test" + File.separator + "Files"));
第一个问题。我不想在我的回收站视图中看到“.csv”。所以我尝试从中删除 4 个字符(请参阅 removeLastChar 方法)。但无论我做什么,它最后都停留在“.csv”。
我想按文件名订购回收站视图。现在它不按名称排序。我尝试了 Comparator 方法,但我不明白如何,我应该在那里解析我的元素。
即使我的文件没有以“.csv”结尾,它们仍会显示在回收站视图中。看起来它捕获了文件夹中的所有文件。
更新 我可以用这个对我的列表进行排序(谢谢):
Collections.sort(inFiles);
但这有点不对劲... 示例:
1.3.2016
10.2.2016
11.4.2016
2.3.2016
3.3.2016
但它应该是这样的:
10.2.2016
1.3.2016
2.3.2016
3.3.2016
11.4.2016
有什么简单的解决方法吗?或者我应该在用户创建文件时实现将“0”写入文件?
更新 2
所以我添加了这个
Collections.sort(inFiles, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
String[] s1Values = s1.split(".");
String[] s2Values = s1.split(".");
//define your comparison, arrays will have each value between '.', e.g. {"1", "3", "2016", "csv" } for "1.3.2016.csv"
int compare_result = s1.compareTo(s2);
return compare_result; //return -1 if s1 < s2, 0 if equal, 1 if s1 > s2
}
});
我的列表是这样的
01.04.2016
02.04.2016
15.04.2016
16.03.2016
但是 16.03.2016 应该是第一个... 提前感谢您的帮助!
【问题讨论】: