Java でCSVファイルの入出力
Java でCSVファイルの入出力
Java でCSVファイルを入出力するラッパークラスを作ってみたのでメモ。
環境
-
Windows7 64bit
-
Java8(javac 1.8.0_60)
-
CSVファイルの書き込み
書き込みには、PrintWriter
クラスを使用。
参考:PrintWriter (Java Platform SE 8)
コンストラクタでは、とりあえず、ファイル名(String) と ファイル(File)に対応させた。
.print
または.println
の引数に、 CSVに書きたい値を渡すだけで書き込みできるようにした。
可変長引数にしているので以下のように書ける。
CSVPrintWriter csvpw = new CSVPrintWriter("test.csv");
csvpw.println(100, "Sato", 20);
csvpw.println(101, "Tanka", 30);
test.csv
100,Sato,20,
101,Tanka,30,
public class CSVPrintWriter {
PrintWriter pw_;
// Constructor
public CSVPrintWriter(String fileName) {
try {
this.pw_ = new PrintWriter(fileName);
} catch (FileNotFoundException fnex) {
fnex.printStackTrace();
}
}
public CSVPrintWriter(File file) {
try {
this.pw_ = new PrintWriter(file);
} catch (FileNotFoundException fnex) {
fnex.printStackTrace();
}
}
public void print(Object arg) {
synchronized (this.pw_) {
this.pw_.print(arg);
this.pw_.print(",");
}
}
public void println(Object... args) {
synchronized (this.pw_) {
for (int i = 0; i < args.length; i++) {
this.pw_.print(args[i]);
this.pw_.print(",");
}
this.pw_.println();
}
}
}
CSVファイルの読み込み
読み込みには、Scanner
クラスを使った。
参考リンク:Scanner (Java Platform SE 8)
コンストラクタは、File
, String
, InputStream
に対応させた。
.read
メソッドで、 CSVデータをArrayList<String[]>
で返すようにした。 ArrayList
のサイズはCSVデータの行数になり、 String[]
のサイズは、カラム数になる。
Scanner の.nextLine()
でCSVの各行にアクセスする、 文字列で返ってくるので、.split(",")
でカンマ区切りでString[]
化している。
public class CSVScanner {
Scanner scan_;
// Constructor
public CSVScanner(File source) {
try {
this.scan_ = new Scanner(source);
} catch (FileNotFoundException fnex) {
fnex.printStackTrace();
}
}
public CSVScanner(String source) {
this.scan_ = new Scanner(source);
}
public CSVScanner(InputStream source) {
this.scan_ = new Scanner(source);
}
public ArrayList<String[]> read() {
ArrayList<String[]> csv_list = new ArrayList<>();
String[] line_str_arr;
synchronized (this.scan_) {
while (this.scan_.hasNext()) {
line_str_arr = this.scan_.nextLine().split(",");
csv_list.add(line_str_arr);
}
}
return csv_list;
}
}
サンプルコード
Java のPrintWriter とScanner を使ったCSVファイルの入出力(Readerと ...