セミコロンで区切られた入力ファイルがあります。最初の列は3文字の固定幅コードで、残りの列は文字列データです。
001;first_data_str;second_data_str;third_data_str;fourth_data_str
001;first_data_str;second_data_str;third_data_str;fourth_data_str
002;first_data_str;second_data_str;third_data_str;fourth_data_str
003;first_data_str;second_data_str;third_data_str;fourth_data_str
001;first_data_str;second_data_str;third_data_str;fourth_data_str
003;first_data_str;second_data_str;third_data_str;fourth_data_str
001;first_data_str;second_data_str;third_data_str;fourth_data_str
002;first_data_str;second_data_str;third_data_str;fourth_data_str
002;first_data_str;second_data_str;third_data_str;fourth_data_str
003;first_data_str;second_data_str;third_data_str;fourth_data_str
003;first_data_str;second_data_str;third_data_str;fourth_data_str
003;first_data_str;second_data_str;third_data_str;fourth_data_str
002;first_data_str;second_data_str;third_data_str;fourth_data_str
001;first_data_str;second_data_str;third_data_str;fourth_data_str
上記のファイルを、最初の列のさまざまな値に基づいていくつかのファイルに分割したいと思います。
たとえば、上記の例では、最初の列に3つの異なる値があるため、ファイルを3つのファイルに分割します。001.txt、002.txt、003.txt
出力ファイルには、1行目としてアイテム数、残りの行としてデータが含まれている必要があります。
つまり、5 001行あるので、001.txtは次のようになります。
5
first_data_str;second_data_str;third_data_str;fourth_data_str
first_data_str;second_data_str;third_data_str;fourth_data_str
first_data_str;second_data_str;third_data_str;fourth_data_str
first_data_str;second_data_str;third_data_str;fourth_data_str
first_data_str;second_data_str;third_data_str;fourth_data_str
同様に、002ファイルの最初の行は4行、次に4行のデータになり、003ファイルの最初の行は5行、次に5行のデータになります。
100,000行を超える非常に大きな入力ファイルを考慮して、これを実現するための最も効率的な方法は何でしょうか。
ファイルから行を読み取るために、以下のコードを記述しました。
try{
FileInputStream fstream = new FileInputStream(this.inputFilePath);
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
while ((strLine = br.readLine()) != null) {
String[] tokens = strLine.split(";");
}
in.close();
}catch(IOException e){
e.printStackTrace();
}