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;
}
追記:これだと問題がありそうなので、
バイナリーデータ扱いで読み込む方が良いです。
同じデリミタで特殊なファイル書き込み
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();
}
}