
A 回答 (3件)
- 最新から表示
- 回答順に表示
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();
}
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.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]);
}
// ループの選択に戻り、改行文字列検索から再スタート。
}
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#で実行時にメソッドの返り値...
-
VirtualとpImplの速度について
-
0x01234Fを数字の1234に変換
-
C#でバブルソート
-
IN演算子の中身を動的に生成
-
JAVA エラー 式の開始が不正で...
-
アンマネージDLLで、ダイアログ...
-
式の型は配列型で int に解決済...
-
Javaの疑問
-
Javaで簡単なアニメーションを...
-
java spring でエラーが出て困...
-
C#での画像ファイルをドラッグ...
-
メインが含まれていません
-
「配列定数は、イニシャライザ...
-
複数のボタンを配置し、それぞ...
-
フローチャート
-
System.err. printlnとSystem.o...
-
ループ処理の際、最後だけ","を...
-
C#でラジオボタンとコンボボッ...
-
C言語のポインターに関する警告
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c# デリゲート関連の命名について
-
「配列定数は、イニシャライザ...
-
SwingでJtableのヘッダ行が表示...
-
java spring でエラーが出て困...
-
Comparatorを使用したソートに...
-
【C#】フォームをなめらかに移動
-
アンマネージDLLで、ダイアログ...
-
JUnit4のアノテーションについて
-
式の型は配列型で int に解決済...
-
java 長さの異なる配列の代入
-
DataSet(DataTable)の使い方
-
JAVA エラー 式の開始が不正で...
-
JAVAでCの関数ポインタのような...
-
メインが含まれていません
-
javaでcsvファイル読込時の改行...
-
tabにdrawImageで画像を描画したい
-
ウィンドウの整列
-
C#でバブルソート
-
行の途中から読み込む方法
-
ある年月の月間日数を取得する...
おすすめ情報