![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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で質問しましょう!
似たような質問が見つかりました
- システム 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
-
Javaで改行などが出来ないのです。
Java
-
ファイル内容の修正、行削除について
Java
-
-
4
改行の判定方法
Java
-
5
CSVファイルの文字項目に改行コードが存在する場合
Java
-
6
javaのCSVデータ読込についてです
Java
-
7
csv出力について
Java
-
8
IOException ってどういうときに起こるのでしょうか?
Java
-
9
ダブルクォーテーションを含む正規表現について。
Java
-
10
close()で例外が投げられる理由
Java
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Javaで電卓を作りたい
-
java spring でエラーが出て困...
-
コード中の謎のエラー
-
javaのエラーの意味がわかりま...
-
C#で「型または名前空間名 'int...
-
javaのプログラムで、forの文が...
-
DataSet(DataTable)の使い方
-
式の型は配列型で int に解決済...
-
二次元配列の初期化の方法。
-
三目並べ(Tick-Tack-Toe)をJav...
-
java初心者の質問(3つの整数の...
-
複数のボタンを配置し、それぞ...
-
因数分解メソッドの改良
-
デスクトップのアイコンの位置...
-
Start:アプレットは初期化され...
-
シンボルが解決できません
-
JUnit4のアノテーションについて
-
データ取得後、JTABLE列幅を変...
-
iアプリでバイナリデータを16進...
-
JAVAでCの関数ポインタのような...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
式の型は配列型で int に解決済...
-
「配列定数は、イニシャライザ...
-
intが負の時に投げる例外はあり...
-
javaでカレンダー作成
-
メインが含まれていません
-
JAVA エラー 式の開始が不正で...
-
Javaで電卓を作りたい
-
javaでcsvファイル読込時の改行...
-
(Swing)JTextFieldを半角のみ入...
-
javaのエラーの意味がわかりま...
-
「WorkImage.getGraphics()」が...
-
初心者ですが、今javaで簡単な...
-
sin曲線とcos曲線を描くプログ...
-
java spring でエラーが出て困...
-
SwingでJtableのヘッダ行が表示...
-
Java 初心者 int型の取り扱い方
-
DataSet(DataTable)の使い方
-
JAVAでCの関数ポインタのような...
-
6桁の数字を重複なしでランダム...
-
JAVA EOFの検出 (条件文で「...
おすすめ情報