Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

ファイル入出力

お世話になります。
お暇な時で結構ですので、ご回答頂ければ幸いです。

フォルダ名がyyyyMMddで管理された階層があり、存在する期間は3年分となります。

各フォルダの中身にはtest.csvなるファイルデータが存在し、そのデータの中で必要なデータのみを抽出し一つのファイルとしてまとめて出力したいのです。

まず、私が考えた(考えつく)方法は、フォルダ名を取得しfor文で一日分ずつデータをマージし、出力する方法です。
for分の中でバッファリングとclose()を繰り返しているので、パフォーマンスが非常に悪いです。

例えば、ファイルを結合 → ファイルを開いてマージ → 出力する。
のような方法はないでしょうか。
またはもっと簡単な方法等あればご教示お願いします。

4

回答

80829

閲覧

4件の回答

評価

0

1行を読み出して、ふるい分けなり加工なりして、必要があれば書き出す。

マージなんかしなけりゃ、それだけで早くなるんじゃないの。

評価

0

grepだけで済む処理だったら面白いんだけどね。
それかgrep結果加工するだけで済むかも?
詳細書いてくれてないからその辺はわかりません。

評価

0

この辺は意見がわかれるところではあると思いますが…
ファイルフォーマットが固定であるならばDBを使うのはいかがでしょうか?ファイル入出力を繰り返すというのは複数のプロセスに対してし処理を要求するということです。

Javaアプリ⇔OS
Javaアプリ⇔OS




上記よりも
Javアプリ⇔DBで完結するほうがパフォーマンスが
良いのは目に見えてます。
一度検討されてみてはいかがでしょうか?

評価

0

例えば、定期バッチでさらってある程度まとめておくのも考えられ
る。
過去分について常に結果が同じになるなら、その結果を1ファイルで
保持しておけば、当日分、悪くても前日分までさらえばいいかも知れ
ない。
条件が多くなければ、条件ごとにまとめておいてもいい。
要するに、変化のない分について予めサマリーを作っておけば、必要
なときにやることを少なくできる。

変化がないことはないが、同じ抽出が何度も発生する可能性があるな
ら、有効期限つきでキャッシュを作る。

馬鹿正直に頭からやり直す必要があるかどうかは質問者にしか分から
ない。考えてみよう。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。