frei

旧「anney's room」からブログ「frei」だけ引っ越し&残しました

CRは0x000D。

仕事の合間にメモ。

Unicodeで、CR は 0x000D、LF は 0x000A。

そんなこんなで

CSVファイルの読み書きの簡単なルーチンを覚書。

保証はしないけど(笑)

どうでもいいけど

今日こそは洗濯したいんで

ちょっとどいてください>上空の雲達

ASCII 251 をデリミタにした場合の特殊なSJISでのファイル読みこみ

private final static String DELIMITER = (new Character((char)0xFFFA)).toString();

public List read(String filePath) {

List csvList = new ArrayList();

try {

FileInputStream fileInputStream = new FileInputStream(filePath);

InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "Shift_JIS");

BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

String readString;

while ((readString = bufferedReader.readLine()) != null) {

csvList.add(Arrays.asList(readString.split(DELIMITER)));

}

bufferedReader.close();

fileInputStream.close();

} catch (Exception e) {

e.printStackTrace();

}

return csvList;

}

追記:これだと問題がありそうなので、

バイナリーデータ扱いで読み込む方が良いです。

→「ByteArrayOutputStream。」参照

同じデリミタで特殊なファイル書き込み

private final static int DELIMITER	= 0xFFFA;

private final static int CR = 0x000D;

private final static int LF = 0x000A;

public void write(String filePath, List csvList) {

try {

FileOutputStream fileOutputStream = new FileOutputStream(filePath);

for (int line = 0; line < csvList.size(); line++) {

List lineList = (List)csvList.get(line);

for (int numOfColumn = 0; numOfColumn < lineList.size(); numOfColumn++) {

if (numOfColumn != 0) fileOutputStream.write(DELIMITER);

String columnString = (String)lineList.get(numOfColumn);

byte[] columnByte = columnString.getBytes();

fileOutputStream.write(columnByte);

}

fileOutputStream.write(CR);

fileOutputStream.write(LF);

}

fileOutputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}