JAVAはCSVファイルを書きます

4344 ワード

CSVは、表データ(数値とテキスト)をテキスト形式で格納するカンマ間隔のテキストファイルです.
        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;
}