CSVファイルから1行(改行コードまで)ずつ読みこんで表示させたいのですが、その方法がわかりません。
どうすれば行で読みこむことができますか?

よろしくお願いします。

A 回答 (1件)

java.io.BufferedReaderクラスにString readLine()というメソッドがあります。



...Javaの質問ということでいいんですよね。

参考URL:http://java.sun.com/j2se/1.3/docs/api/index.html
    • good
    • 0
この回答へのお礼

ありがとうございます。
まだまだ勉強が足りないと痛感しました。

お礼日時:2001/09/18 13:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QjavaにおけるCSV出力時の文字コード改行コード

JavaでCSVを出力する処理を作りました。

下記コードだとUnix環境で文字コードSJISで改行コードLFで出力されますが、
Windows環境でもUnix環境でも一律、文字コードSJISで改行コードCRLFで出力されるようにしたいです。

何かいい方法はありませんでしょうか。

なお、printlnで出力している行が多い為、
bw,Print("日付" + 変数A + \r\n);
というふうに一行づつ変更するのは避けたいと思っております。


try{

PrintWriter bw = new PrintWriter(new BufferdWriter(new OutputStreamWriter(new FileOutputStream(/tmp/test.csv),"SJIS")));

bw.println("日付" + 変数A);
bw.println("氏名" + 変数B);




}catch(Exception e){
// ログに出力
}

Aベストアンサー

System.setProperty("line.separator", "\r\n"); とすればbw.println()での出力改行コードを強制的にCRLFにできると思います。
ただし、この方法は特定のbwオブジェクトだけではなくline.separatorプロパティを参照する全てのコードが影響を受けるので、副作用に注意が必要です。

QCSVファイルの文字項目に改行コードが存在する場合

CSVファイルの文字項目に改行コードが存在する場合

2つほど質問したいことがあります。もしよろしければアドバイス頂けると嬉しいです。

1つ目
javaでcsvファイルを読み込んで分割したいと思っています。
単純に考えればセパレータ(ここではカンマにしたいと思います)でsplit関数で済むのですが、いくつか特殊?な要件があります。

1.文字項目は"で囲まれる(例:123,"abc",456)
2.文字項目に改行コードが含まれる場合がある。
3.文字項目に"がある場合は""となる。
(4.文字項目に,がある場合は,,となる。)←ここは未確定になります。確定したら別途質問させて頂きたいと思っています。

特にいま気にしているのは2です。
改行コードが含まれているので、普通にファイルを1行読み込んでも途中までしか取得できないと想定しています。
改行が含まれている場合、2行以上(複数の改行の可能性)が1行分なのですが、どのように処理すればよいのか困っています。

2つ目
読み込んだデータをDB(DB2)に登録するのですが、改行コード込みで登録したいと思っています。1つ目の処理と絡んでどのようにすればうまくいくか悩んでいます。

よろしければアドバイス頂けないでしょうか。

CSVファイルの文字項目に改行コードが存在する場合

2つほど質問したいことがあります。もしよろしければアドバイス頂けると嬉しいです。

1つ目
javaでcsvファイルを読み込んで分割したいと思っています。
単純に考えればセパレータ(ここではカンマにしたいと思います)でsplit関数で済むのですが、いくつか特殊?な要件があります。

1.文字項目は"で囲まれる(例:123,"abc",456)
2.文字項目に改行コードが含まれる場合がある。
3.文字項目に"がある場合は""となる。
(4.文字項目に,がある場合は,,となる。...続きを読む

Aベストアンサー

2の回答した者です。

外部ライブラリを使用できないにしても、askaaskaさんの言うとおり
OpenCSVの解析ロジックを参考にしてはどうでしょう?
車輪の再発明はあまりよろしくないですし。

なお、OpenCSVはソースはすべて公開されていますし、解析部分(「CSVReader.java」
と「CSVParser.java」)ぐらいなら、結構簡単に目を通せる規模ですよ。


あと、2つ目の質問ですが、データに改行コードを含んでいてもJDBCで普通にInsert
などできると思いますが、何が問題なのでしょうか?
もう少し詳細に書いていただけると、解答しやすいと思います。

QCSVファイル「Test.csv」(文字コードWindows-31J(

CSVファイル「Test.csv」(文字コードWindows-31J(CP932))を、
CentOS(Linux)上の/var/lib/mysqlディレクトリ上(MySQLデフォルトのデータディレクトリ)へ、
アップロードしてから、
以下のJavaプログラム(エラー処理内容だけは省略していますが・・・)
 ↓
final Runtime rt = Runtime.getRuntime();
final Process pr = rt.exec("chown mysql:mysql" + " "
+ "/var/lib/mysql/Test.csv");
try {
pr.waitFor();
final int intRet = pr.exitValue();
if (intRet != 0) {
return;
}
} catch (final Exception ex2) {
return;
}

を実行して、
アップロード後の「Test.csv」ファイルの「所有者」、および「グループ」を、
元々の「root」から、「mysql」に変更させて、
その後、
MySQLコマンドの「LOAD DATA INFILE」を実行すると、
なぜか、
以下のエラーが発生します。
 ↓
java.sql.SQLException: Access denied for user 'SYSASA'@'localhost' (using password: YES)

なお、別のやり方として以下のテストも試してみました。
 ↓
上記のJavaプログラムを実行せずに、
アップロード後のファイルを直接、
CentOS上から手作業(プロパティ)で、
アップロード後の「Test.csv」ファイルの「所有者」、および「グループ」を、
元々の「root」から、「mysql」に変更させてから、
その後、
MySQLコマンドの「LOAD DATA INFILE」を実行すると、
問題無く、インポート出来ています。

そこで、
ご質問内容なのですが、
Javaプログラムを利用しているか、していないか
だけの違いで、
実施しているのですが、
なぜか、上記致しましたJavaプログラムで、
アップロード後の「Test.csv」ファイルの「所有者」、および「グループ」を、
元々の「root」から、「mysql」に変更させてから、
MySQLコマンドの「LOAD DATA INFILE」を実行すると、
上記のエラーになります。

何が問題なのか?
もしお気づきの点などございましたら、
ぜひ教えてください。

お世話になります。
以上、宜しくお願い致します。

CSVファイル「Test.csv」(文字コードWindows-31J(CP932))を、
CentOS(Linux)上の/var/lib/mysqlディレクトリ上(MySQLデフォルトのデータディレクトリ)へ、
アップロードしてから、
以下のJavaプログラム(エラー処理内容だけは省略していますが・・・)
 ↓
final Runtime rt = Runtime.getRuntime();
final Process pr = rt.exec("chown mysql:mysql" + " "
+ "/var/lib/mysql/Test.csv");
try {
pr.waitFor();
final int intRet = pr.exitValue();
if (intRet != 0) {
return;
}
} catch (final Exception ex2...続きを読む

Aベストアンサー

ファイルをインポートするには、FILE権限が必要です。
phpMyAdminツール等で、
mysqlデータベース内、userテーブル内の、
「File_Priv」フィールドの値を、Nから→Yに変更して保存してから、
MySQLサービスをリブートすればよいです。
(所有者とグループは、rootのままでOKです)

QCSVファイルの特定の行だけを読み込みたいです。

例えば以下のような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の標準のクラスではこういったことは可能なのでしょうか?

私なりに調べてみたのですが調べ方が悪いのか知識が及ばないため、
こちらで質問させていただきました。
もしご存知の方がおられましたらアドバイスいただけますと助かります。
よろしくお願いします。

例えば以下のような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());

ただし、上記の通りル...続きを読む

Aベストアンサー

Javaはしばらくいじってないのであれですが・・・

仮にreadline(9999)というような関数があるとしても内部的には
for(int i=0;i<9998);i++){
br.readline()
}
と同じことをしていて スペック的にはほとんど変わらないはずです。
9999行目を読み込むためには 1行目から順に最初からファイルを読んでいって改行の数を数えてやる必要があるので・・・


見栄えがというのであれば自分でBufferedReader を継承して独自のクラスを作ってしまったらいかがでしょう?
readline(int line)だけ書いてやるだけだから5分とかからないし・・・


なおJavaは最近いじってないので標準関数でご希望のものがあるかはわかりませんが
自分だったらそんなことで悩んでる暇があったら自分で書いちゃいます。

Qjsp 改行コードで改行させて表示したい

はじめまして。

PostgreSQLから読み込んだ文字列データを表示させるtomcat+struts+servlet/jspを作成中です。
データの文字列に含まれる改行が、クライアントに表示された際に反映されず困っています。

過去ログも調べ、近い質問はありましたが、僕とは内容が微妙に違うようで、改めて質問させていただきました。


例えば、あるテーブルのある項目に、
A
B
C
というデータ(A,Bそれぞれの後に改行のある3行の文字列)があるとします。

これを読み込みaction form bean(と言うのですか?setter/getterを定義する関数です)を介してjspに埋め込むと、できあがるhtmlでは、
ABC
と改行されずに表示されます。

htmlで改行させるには「<BR>」が必要なのかと、データ文字列に0x0dや0x0a、または0x0d+0x0aがあれば「<BR>」に置き換えてaction form bean(?)のsetterに渡してjspを作ると、今度は、
A<BR>B<BR>C
と「<BR>」が文字列として表示されます。
htmlをソース表示すると、「A&lt;BR&gt;B&lt;BR&gt;C」で、親切にも「<」「>」をそれぞれ「&lt;」「&gt;」に勝手に置き換えあくまで文字列として表示してくれるようです。

試しに改行コードを「&lt;BR&gt;」に置き換えても予想通りその部分は
&lt;BR&gt;
とそのまま表示され、そのソースは「&amp;lt;BR&amp;gt;」でした。

「<」や「&lt;」等をそれぞれ「&lt;」「&amp;lt;」のように置き換える作業は、どこが行っているのでしょうか。
また、改行位置で改行させるにはどうすればよろしいでしょう。
OSはwindowsXPです。

無知ゆえに、つまらないことで悪戦苦闘しているのかも知れませんが、経験も浅くてよく解りません。

宜しくお願い致します。

はじめまして。

PostgreSQLから読み込んだ文字列データを表示させるtomcat+struts+servlet/jspを作成中です。
データの文字列に含まれる改行が、クライアントに表示された際に反映されず困っています。

過去ログも調べ、近い質問はありましたが、僕とは内容が微妙に違うようで、改めて質問させていただきました。


例えば、あるテーブルのある項目に、
A
B
C
というデータ(A,Bそれぞれの後に改行のある3行の文字列)があるとします。

これを読み込みaction form bean(と言うのですか?setter/...続きを読む

Aベストアンサー

私も経験が浅いので、分からない部分が多いのですが、

"<"や">"を置き換えるという機能は、
Javaというより、strutsが提供している機能らしいです。

"<"や">"を置き換える機能を持たせないと、
ユーザーが何かフォーマットに入力するときに、
JavaScriptを書き込んで、
例えば、alertを出し続けるようないたずらができてしまうので、
そういうことを防ぐために、変換機能を持っているのだと思います。
(具体的にどのタイミングで変換しているかは分からないのですが・・・)

単純に、画面上で改行された表示にしたいということであれば、
HTMLの<pre>タグを使うといいと思います。

-----------------------------
<pre>
A
B
C
</pre>
-----------------------------
という感じで、改行されて表示されると思います。
この方法でやるなら、改行コードを"<BR>"に置き換える処理はしないことになります。

少しでも手がかりになればと思い、書き込ませていただきました。

私も経験が浅いので、分からない部分が多いのですが、

"<"や">"を置き換えるという機能は、
Javaというより、strutsが提供している機能らしいです。

"<"や">"を置き換える機能を持たせないと、
ユーザーが何かフォーマットに入力するときに、
JavaScriptを書き込んで、
例えば、alertを出し続けるようないたずらができてしまうので、
そういうことを防ぐために、変換機能を持っているのだと思います。
(具体的にどのタイミングで変換しているかは分からないのですが・・・)

単純に、画面上で改行...続きを読む


人気Q&Aランキング

おすすめ情報