例えば以下のような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年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
IOException ってどういうときに起こるのでしょうか?
Java
-
行の途中から読み込む方法
Java
-
CSVファイルの、列だけ取得したい
Java
-
-
4
javaで大容量テキストファイルの読み込みについて
Java
-
5
csvファイルを2次元配列に格納
Java
-
6
csv出力について
Java
-
7
ファイル内容の修正、行削除について
Java
-
8
JavaでCSVファイルを高速に読む方法
Java
-
9
ファイル内の1行(レコード)から指定バイト数だけを読込みたい。
Java
-
10
テキストファイルから空白行をよむ
Java
-
11
[JAVA]try 内の変数を外で!?
Java
-
12
flush()とclose()について
Java
-
13
javaでcsvファイル読込時の改行について
Java
-
14
テキストファイルにおいて任意の単語を含む一行を削除させたい
Java
-
15
半角記号、全角記号を含む正規表現を作れなくて困っています。
Java
-
16
Junitテストでvoid戻り値メッソドをテストする方法
Java
-
17
htmlでテーブル内にテキストボックスを作りたいのですが・・・
HTML・CSS
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
VBAで3秒だけ時間を止めたい
-
DoEventsが必要な理由について
-
GIFアニメをループさせたくない
-
vba
-
アクティブセルから、A列最終行...
-
VBA Dir関数でファイルをループ...
-
流れ図(フローチャート)が分か...
-
DOSコマンドのループ内のTIMEコ...
-
Application.OnTime の使い方
-
ループフリー
-
VBA for文が止まらない
-
vb.netからエクセル関数書き込み
-
csh foreachで「*」でエラ...
-
一巡伝達関数と開ループ伝達関数
-
VBA for i=1 to lastrow
-
VB.NETで素因数分解のプログラ...
-
ループ内での条件処理
-
VBAでの一時停止と再開の方法
-
どなたかこのプログラミングを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
VBAでの一時停止と再開の方法
-
ループ7回目の悪役令嬢は、元敵...
-
UWSCの終了の仕方
-
Escキーを押すと、中断する時と...
-
エクセルの当番表を作っていま...
-
GIFアニメをループさせたくない
-
VBAで3秒だけ時間を止めたい
-
どなたかこのプログラミングを...
-
VBA for i=1 to lastrow
-
DOSコマンドのループ内のTIMEコ...
-
ListBox 複数選択 で オートフ...
-
vbscriptでIE自動入力(途中で...
-
vb.netからエクセル関数書き込み
-
DoEventsが必要な理由について
-
Java 南京錠
-
アクティブセルから、A列最終行...
-
テキストボックスの名前に変数...
-
範囲指定したセルを1つずつ飛...
-
VBA Dir関数でファイルをループ...
おすすめ情報