在我的Java程序中,我处理了一定数量的文件。 这些文件以这种方式命名:
thu 21 mar 2013_01.55.22_128.txt
thu 21 mar 2013_01.55.22_129.txt
thu 21 mar 2013_01.55.22_130.txt
....
sat 23 mar 2013_01.45.55_128.txt
sat 23 mar 2013_01.45.55_129.txt
sat 23 mar 2013_01.45.55_130.txt
最后三个数字是单元格编号。 考虑一下我已按日期顺序读取来自同一单元格的文件。 请考虑所有文件都在同一个文件夹中。 还要考虑这个问题,但对于单个单元格,在This Post
上正确解决了我现在的问题是:如何首先读取来自特定单元格的所有文本(例如128),然后是来自单元格129的所有文件,依此类推? (下图:图示)
thu 21 mar 2013_01.55.22_128.txt
sat 23 mar 2013_01.45.55_128.txt
...
thu 21 mar 2013_01.55.22_129.txt
sat 23 mar 2013_01.45.55_129.txt
...
thu 21 mar 2013_01.55.22_130.txt
sat 23 mar 2013_01.45.55_130.txt
我希望我很清楚
答案 0 :(得分:1)
您可以使用listFiles()
将目录中的所有文件放入数组中,然后使用自定义比较器对其进行排序。
File[] files = dir.istFiles();
Array.sort(files, new Comparator<File> {
@Override
public int compare(File lhs, File rhs) {
//return -1 if lhs should go before
//0 if it doesn't matter
//1 if rhs should go after
}
});
答案 1 :(得分:0)
好吧,您可以阅读该文件夹以获取File
个对象(或者只是文件名)。
然后解析文件名,提取单元格并将文件放入其键为单元格的映射中。
一些伪代码:
Map<String, List<File>> filesPerCell = new LinkedHashMap<String, List<File>>();
File[] files = folder.listFiles();
for( File file : files ) {
String filename = file.getName();
String cell = ... ; //extract from filename
List<File> l = filesPerCell.get( cell );
//create new list if l is null
l.add( file );
}
for( List<File> cellList : filesPerCell.values() ) {
//do whatever you want with the files for that cell
}
答案 2 :(得分:0)
您的文件名将按单元格编号排序,并在单元格内按日期/时间排序。如果你的文件名是这样的话,你可以最容易地做到这一点:
cellnumber_yyyymmdd_hhmmss
其中,在所有情况下,cellnumber的位数都相同。
否则你必须编写一个自定义比较器(如@RiaD所写),但由于必须解析的日期因此可以在之后/之前做出决定,因此它并不简单。