JAVAはCSVファイルを書きます
4344 ワード
CSVは、表データ(数値とテキスト)をテキスト形式で格納するカンマ間隔のテキストファイルです.
JAVAではファイルストリームを出力することでCSVファイルにデータを書き込むことができます.
まずオブジェクトクラスを定義します
ライト・ファイル・フローの呼び出し方法
ファイルストリームを書く方法に加えて、オープンソースクラスライブラリopencsvによってcsvファイルを生成することもできます.jarパッケージの導入が必要です
呼び出し方法は次のとおりです.
生成されたファイルのヘッダは、name、age、sexなどのフィールド名です.別の内容に置き換える場合は注記@CsvBindByNameを使用します
JAVAではファイルストリームを出力することでCSVファイルにデータを書き込むことができます.
まずオブジェクトクラスを定義します
public class Person {
private String name;
private int age;
private int sex;
private String phone;
private String address;
}
次に、データを入力します.List dataList = new ArrayList();
Person person1 = new Person();
person1.setName(" ");
person1.setSex(1);
person1.setAge(55);
person1.setPhone("13911111111");
person1.setAddress(" ");
dataList.add(person1);
Person person2 = new Person();
person2.setName(" ");
person2.setSex(0);
person2.setAge(20);
person2.setPhone("13911112222");
person2.setAddress(" ");
dataList.add(person2);
Person person3 = new Person();
person3.setName(" ");
person3.setSex(1);
person3.setAge(25);
person3.setPhone("13933333333");
person3.setAddress(" ");
dataList.add(person3);
ライト・ファイル・フローの呼び出し方法
public void writeCSV(List dataList, String finalPath) {
FileOutputStream out = null;
OutputStreamWriter osw = null;
BufferedWriter bw = null;
try {
File finalCSVFile = new File(finalPath);
out = new FileOutputStream(finalCSVFile);
osw = new OutputStreamWriter(out, "UTF-8");
// BOM
osw.write(new String(new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF }));
bw = new BufferedWriter(osw);
/**
* CSV
*/
String title = "";
title = " , , , , ";
bw.append(title).append("\r");
if (dataList != null && !dataList.isEmpty()) {
for (Person data : dataList) {
bw.append(data.getName() + ",");
if (data.getSex() == 1) {
bw.append(" ,");
} else if (data.getSex() == 0) {
bw.append(" ,");
} else {
bw.append(" ,");
}
bw.append(data.getAge() + ",");
bw.append(data.getPhone() + ",");
bw.append(data.getAddress());
bw.append("\r");
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bw != null) {
try {
bw.close();
bw = null;
} catch (IOException e) {
e.printStackTrace();
}
}
if (osw != null) {
try {
osw.close();
osw = null;
} catch (IOException e) {
e.printStackTrace();
}
}
if (out != null) {
try {
out.close();
out = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
System.out.println(finalPath + " ");
}
注意:生成されたcsvファイルはEXCELで開くと常に文字化けしが発生しますが、NOTEPAD++で開くと正常に表示されます.これは、エクスポートされたファイルがUTF-8でBOM形式でエンコードされていないため、EXCELが正しく表示されるように、出力する内容にBOM IDを手動で付ける必要があるためです.ファイルストリームを書く方法に加えて、オープンソースクラスライブラリopencsvによってcsvファイルを生成することもできます.jarパッケージの導入が必要です
com.opencsv
opencsv
3.10
呼び出し方法は次のとおりです.
public void writeCSV2(List dataList, String finalPath) {
try {
Writer writer = new FileWriter(finalPath);
writer.write(new String(new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF }));
StatefulBeanToCsv beanToCsv = new StatefulBeanToCsvBuilder(writer)
.withQuotechar(CSVWriter.NO_QUOTE_CHARACTER)
.withSeparator(CSVWriter.DEFAULT_SEPARATOR)
.withEscapechar('\\').build();
beanToCsv.write(dataList);
writer.close();
} catch (IOException e) {
e.printStackTrace();
} catch (CsvDataTypeMismatchException e) {
e.printStackTrace();
} catch (CsvRequiredFieldEmptyException e) {
e.printStackTrace();
}
System.out.println(finalPath + " ");
}
生成されたファイルのヘッダは、name、age、sexなどのフィールド名です.別の内容に置き換える場合は注記@CsvBindByNameを使用します
public class Person {
@CsvBindByName(column = " ")
private String name;
@CsvBindByName(column = " ")
private int age;
@CsvBindByName(column = " ")
private int sex;
@CsvBindByName(column = " ")
private String phone;
@CsvBindByName(column = " ")
private String address;
}