Java - 从文件夹中按特定顺序读取特定文件

时间:2013-07-23 09:36:13

标签: java

在我的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

我希望我很清楚

3 个答案:

答案 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所写),但由于必须解析的日期因此可以在之后/之前做出决定,因此它并不简单。