例えば以下のようなCSV形式のデータが10000行あるとします。
1,10,15,3
2,1,5,1
70,2,4,2
2,4,5,6
11,1,9,9
・・・
上記ファイルから、例えば9999行目を取得したい場合、
現在は以下のような手順で9998行をループで読み込んでから、
9999行目を取得しています。(エラー処理などは省いています)
BufferedReader br = new BufferedReader(new FileReader("hoge.csv"));
for( int i=0; i<9998; i++ ){ br.readLine(); }
System.out.println("9999行目="+br.readLine());
ただし、上記の通りループを9998回まわし、
データを1行ずつ読み込むのは非常に効率が悪いです。
できれば、br.readLine(9999); といった感じで行数を直接指定できる方法があるならば、
無駄な処理を省けて見栄えも速度も良くなると思うのですが、
Javaの標準のクラスではこういったことは可能なのでしょうか?
私なりに調べてみたのですが調べ方が悪いのか知識が及ばないため、
こちらで質問させていただきました。
もしご存知の方がおられましたらアドバイスいただけますと助かります。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
Javaはしばらくいじってないのであれですが・・・
仮にreadline(9999)というような関数があるとしても内部的には
for(int i=0;i<9998);i++){
br.readline()
}
と同じことをしていて スペック的にはほとんど変わらないはずです。
9999行目を読み込むためには 1行目から順に最初からファイルを読んでいって改行の数を数えてやる必要があるので・・・
見栄えがというのであれば自分でBufferedReader を継承して独自のクラスを作ってしまったらいかがでしょう?
readline(int line)だけ書いてやるだけだから5分とかからないし・・・
なおJavaは最近いじってないので標準関数でご希望のものがあるかはわかりませんが
自分だったらそんなことで悩んでる暇があったら自分で書いちゃいます。
改行コードがいくつ入ってるかを調べないと駄目ということは、
あまり速度的にも改善は見込めなさそうですね。
見栄えよりも出来れば速度的に改善したかったので、
改善しようと思ったらデータの形式自体を変えないと無理でしょうか…。
ご回答ありがとうございました。
No.3
- 回答日時:
「各行の長さが一定である」などの条件がない限り, 本質的にはどうしようもありません. ほかの人も書かれていますが, 「見栄え」はき
れいになっても効率は変わらないです.見栄えよりも出来れば速度的に改善したかったので、
他の方も仰るとおりデータの形式自体を変えないと無理みたいですね…。
でもこれでモヤモヤが取れました。
ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- HTML・CSS HTMLソースの質問 3 2022/07/28 13:29
- Visual Basic(VBA) VBA 毎日取得するデータを順番に反映していく方法 6 2023/08/26 16:22
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Access(アクセス) CSVファイルの「0落ち」にVBA 6 2023/02/02 15:27
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
CSVファイルの、列だけ取得したい
Java
-
csvファイルを2次元配列に格納
Java
-
ファイル内容の修正、行削除について
Java
-
-
4
flush()とclose()について
Java
-
5
行の途中から読み込む方法
Java
-
6
テキストファイルにおいて任意の単語を含む一行を削除させたい
Java
-
7
ファイル内の1行(レコード)から指定バイト数だけを読込みたい。
Java
-
8
javaで大容量テキストファイルの読み込みについて
Java
-
9
csv出力について
Java
-
10
IOException ってどういうときに起こるのでしょうか?
Java
-
11
yyyymmddからyyyy/mm/ddへの変換
Java
-
12
javaでcsvファイル読込時の改行について
Java
-
13
半角記号、全角記号を含む正規表現を作れなくて困っています。
Java
-
14
巨大なCSVの加工(指定列のみの抽出)について
Visual Basic(VBA)
-
15
Excel関数で休日出勤日数を計算
Excel(エクセル)
-
16
Eclipseで、プロジェクト名のところに赤いバッテンのエラーマークが
Java
-
17
System.out.printlnの意味がよくわかりません。
Java
-
18
複数の休憩時間がある場合の休憩時間の算出方法
Excel(エクセル)
-
19
JavaでCSVファイルを高速に読む方法
Java
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
GIFアニメをループさせたくない
-
範囲指定したセルを1つずつ飛...
-
プログラミングについて。 1つ...
-
VBAでの一時停止と再開の方法
-
Do whileでExitせず、ループの...
-
Javaでゲーム
-
フラグについて
-
VBA for i=1 to lastrow
-
一巡伝達関数と開ループ伝達関数
-
どなたかこのプログラミングを...
-
CSVファイルの特定の行だけを読...
-
DoEventsが必要な理由について
-
.Netのタイマーについて
-
アルゴリズム:2分探索の時間計算量
-
エクセルの当番表を作っていま...
-
VBA Dir関数でファイルをループ...
-
pythonでファイルのコメント行...
-
Escキーを押すと、中断する時と...
-
VBAで3秒だけ時間を止めたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
VBAで3秒だけ時間を止めたい
-
VBAでの一時停止と再開の方法
-
どなたかこのプログラミングを...
-
Escキーを押すと、中断する時と...
-
UWSCの終了の仕方
-
エクセルの当番表を作っていま...
-
VBA for i=1 to lastrow
-
「偶数・奇数の和」のフローチ...
-
アクティブセルから、A列最終行...
-
DoEventsが必要な理由について
-
vb.netからエクセル関数書き込み
-
GIFアニメをループさせたくない
-
DOSコマンドのループ内のTIMEコ...
-
範囲指定したセルを1つずつ飛...
-
流れ図(フローチャート)が分か...
-
乱数の桁数指定、または範囲指定。
-
テキストボックスの名前に変数...
-
CSVファイルの特定の行だけを読...
-
vbscriptでIE自動入力(途中で...
おすすめ情報