-1

私の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

最後の 3 つの数字はセル番号です。同じセルからのファイルを日付順に既に読んでいると考えてください。すべてのファイルが同じフォルダーにあると考えてください。この問題は、単一のセルの場合、この投稿で正しく解決されたことも考慮してください

私の質問は次のとおりです。最初に特定のセル(たとえば128)からのすべてのtxtを読み取り、次にセル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

私は明確だったと思います

4

3 に答える 3

1

into arrayを使用してディレクトリ内のすべてのファイルを取得し、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
    }
});
于 2013-07-23T09:43:58.960 に答える
0

ファイル名はセル番号でソートされ、セル内では日付/時刻でソートされます。ファイル名が次のようなものであれば、これを最も簡単に行うことができます。

cellnumber_yyyymmdd_hhmmss

ここで、cellnumber はすべての場合で同じ桁数になります。

それ以外の場合は、(@RiaD が書いているように) カスタム コンパレータを記述する必要がありますが、日付を解析する必要があるため、後/前に決定できるため、簡単ではありません。

于 2013-07-23T12:55:29.350 に答える
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
}
于 2013-07-23T09:40:17.397 に答える