A 回答 (3件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
うーん、標準のAPIでは対応できないかもしれませんねぇ。
なので、自前でユーティリティ・クラスを作ってみました。
public class LineReader {
/**
* 読込元の文字入力ストリーム。
*/
private Reader reader;
/**
* 改行文字列。
*/
private String lineFeed;
/**
* 文字入力ストリームから読み取った文字列を保持するバッファ。
*/
private StringBuffer buffer;
/**
* 文字入力ストリームから読み込むときに一時的に利用する。
*/
private char[] cbuf;
/**
* コンストラクタ。
* @param reader 読込元の文字入力ストリーム
* @param lineFeed 改行文字列
*/
public LineReader(Reader reader, String lineFeed) {
this(reader, lineFeed, 1024);
}
/**
* コンストラクタ。
* @param reader 読込元の文字入力ストリーム
* @param lineFeed 改行文字列
* @param cbufSize ストリームから1回で読み取るサイズ。
*/
public LineReader(Reader reader, String lineFeed, int cbufSize) {
this.reader = reader;
this.lineFeed = lineFeed;
this.buffer = new StringBuffer();
this.cbuf = new char[cbufSize];
}
/**
* 1行を読み取ります。
* @return 読み取った行。ストリームの終端まで来たらnull。
* @throws IOException 読み取りに失敗した場合。
*/
public String readLine() throws IOException {
while (true) {
// 入力ストリームより前に、バッファに改行文字列がないか確認
int posOfLineFeed = buffer.indexOf(lineFeed);
// 改行文字列があれば、
// そこまでの部分文字列を戻す。
// 戻す前に、その部分文字列と当該改行文字列をバッファから除去して、
// 次回このメソッドが呼ばれたときに備える。
if (posOfLineFeed >= 0) {
String line = buffer.substring(0, posOfLineFeed);
buffer.delete(0, posOfLineFeed + lineFeed.length());
return line;
}
// 入力ストリームから読み取り。
int readLength = reader.read(cbuf);
// ストリーム終端まで到達していた場合、
if (readLength < 0) {
// バッファに残りがあれば、残りの文字列すべてを戻す。
if (buffer.length() > 0) {
String line = buffer.toString();
buffer.delete(0, buffer.length());
return line;
}
// バッファに残りがなければ、空文字列。
return null;
}
// 読み込んだ位置まで、バッファに移しておく。
for (int index = 0; index < readLength; index++) {
buffer.append(cbuf[index]);
}
// ループの選択に戻り、改行文字列検索から再スタート。
}
}
}
No.2
- 回答日時:
#1を使用するソース例
public static void main(String[] args) {
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(args[0]));
LineReader lineReader = new LineReader(reader, "\r\n");
for (int i = 0; true; i++) {
String line = lineReader.readLine();
if (line == null) {
break;
}
System.out.print("[" + i + "]");
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
No.3
- 回答日時:
いろいろ考慮もれがあるかも。
インデントは全角スペースを使用。
// サンプル
try {
java.io.File inFile = new File("./inText.csv");
java.io.FileInputStream fis = new FileInputStream(inFile);
int size = Integer.MAX_VALUE;
if (Integer.MAX_VALUE >= inFile.length()) {
size = (int)inFile.length();
}
byte[] src = new byte[size];
byte[] readBuf = new byte[0];
while( fis.read(src) != -1) {
byte[] dest = new byte[readBuf.length + src.length];
System.arraycopy(readBuf, 0, dest, 0, readBuf.length);
System.arraycopy(src, 0, dest, readBuf.length, src.length);
readBuf = dest;
}
String readStr = new String(readBuf);
// 区切りは改行
String delim = "\r\n";
// 区切りを含むかどうか true:含む、false:含まない
boolean returnDelims = true;
java.util.StringTokenizer token = new StringTokenizer(readStr, delim, returnDelims);
while (token.hasMoreTokens()) {
// printlnではない。
System.out.print(token.nextToken());
}
}
catch (Exception e) {
e.printStackTrace();
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- XML PHP.laravelについて 1 2023/07/06 15:26
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
- システム 外付けHDDの初期化について 4 2023/03/05 20:00
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
javaのCSVデータ読込についてです
Java
-
CSVファイルの文字項目に改行コードが存在する場合
Java
-
javaにおけるCSV出力時の文字コード改行コード
Java
-
-
4
javaで質問です。 文字列2023/2/3(一桁の場合、0埋めなし)の場合にyyyyMMddに変換
Java
-
5
ファイル内容の修正、行削除について
Java
-
6
[JAVA]try 内の変数を外で!?
Java
-
7
Javaで改行などが出来ないのです。
Java
-
8
ダブルクォーテーションを含む正規表現について。
Java
-
9
改行の判定方法
Java
-
10
csv出力について
Java
-
11
IOException ってどういうときに起こるのでしょうか?
Java
-
12
yyyymmddからyyyy/mm/ddへの変換
Java
-
13
配列のメソッド
Java
-
14
Viewにインデックスは張れますか?
Oracle
-
15
ファイル読み込み/書き込み速度を上げるには
Java
-
16
生成したインスタンスを削除する方法
Java
-
17
CSVファイルの特定の行だけを読み込みたいです。
Java
-
18
close()で例外が投げられる理由
Java
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「配列定数は、イニシャライザ...
-
intが負の時に投げる例外はあり...
-
Javaで電卓を作りたい
-
JUnit4のアノテーションについて
-
初心者ですが、今javaで簡単な...
-
javaで電卓を作りたいのですが...
-
JAVA エラー 式の開始が不正で...
-
DataSet(DataTable)の使い方
-
C++からC#のdllを参照する際、...
-
javaのエラーの意味がわかりま...
-
前日日付の取得
-
(Swing)JTextFieldを半角のみ入...
-
消費税を計算
-
各店舗全て、リンゴは1個150円...
-
すいません、質問というか困っ...
-
java spring でエラーが出て困...
-
java 格納した乱数それぞれにボ...
-
Java 初心者 int型の取り扱い方
-
C#で実行時にメソッドの返り値...
-
java 長さの異なる配列の代入
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
式の型は配列型で int に解決済...
-
「配列定数は、イニシャライザ...
-
javaでcsvファイル読込時の改行...
-
java spring でエラーが出て困...
-
javaでカレンダー作成
-
Javaで電卓を作りたい
-
SwingでJtableのヘッダ行が表示...
-
JAVA エラー 式の開始が不正で...
-
JAVAでCの関数ポインタのような...
-
C#で実行時にメソッドの返り値...
-
(Swing)JTextFieldを半角のみ入...
-
c# デリゲート関連の命名について
-
Javaでポインタ的なことはでき...
-
複数のボタンを配置し、それぞ...
-
JUnit4のアノテーションについて
-
javaのエラーの意味がわかりま...
-
intが負の時に投げる例外はあり...
-
sin曲線とcos曲線を描くプログ...
-
C++からC#のdllを参照する際、...
-
Java 初心者 int型の取り扱い方
おすすめ情報