Java下將資料寫入CSV檔案中
阿新 • • 發佈:2018-12-26
import java.io.*; import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List; /**Created by JYM on 2018/12/26 * 下面的這段程式是Java將資料寫入CSV檔案中; * */ public class CSV { public static void main(String[] args) { Object[] objects = {1,2,3,4,8,7,9,6,5,11,12}; ArrayList<Object[]> list = new ArrayList<>(); list.add(objects); list.add(objects); list.add(objects); boolean Flag=createCsvFile(list,"G:\\CSVDir","csvFile"); if (Flag == true) { System.out.print("CSV檔案建立成功!"); }else { System.out.print("CSV檔案建立失敗!"); } } public static boolean createCsvFile(List<Object[]> rows, String filePath, String fileName) { //標記檔案生成是否成功; boolean flag = true; //檔案輸出流 BufferedWriter fileOutputStream = null; try{ //含檔名的全路徑 String fullPath = filePath+ File.separator+fileName+".csv"; File file = new File(fullPath); if (!file.getParentFile().exists()) //如果父目錄不存在,建立父目錄 { file.getParentFile().mkdirs(); } if (file.exists()) //如果該檔案已經存在,刪除舊檔案 { file.delete(); } file = new File(fullPath); file.createNewFile(); //格式化浮點資料 NumberFormat formatter = NumberFormat.getNumberInstance(); formatter.setMaximumFractionDigits(10); //設定最大小數位為10; //格式化日期資料 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); //例項化檔案輸出流 fileOutputStream = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file),"GB2312"),1024); //遍歷輸出每行 Iterator<Object[]> ite = rows.iterator(); while (ite.hasNext()) { Object[] rowData = (Object[])ite.next(); for(int i=0;i<rowData.length;i++) { Object obj = rowData[i]; //當前欄位 //格式化資料 String field = ""; if (null != obj) { if (obj.getClass() == String.class) //如果是字串 { field = (String)obj; }else if (obj.getClass() == Double.class || obj.getClass() == Float.class) //如果是浮點型 { field = formatter.format(obj); //格式化浮點數,使浮點數不以科學計數法輸出 }else if (obj.getClass() == Integer.class || obj.getClass() == Long.class | obj.getClass() == Short.class || obj.getClass() == Byte.class) { //如果是整型 field += obj; }else if (obj.getClass() == Date.class) //如果是日期型別 { field = sdf.format(obj); }else { field = " "; //null時給一個空格佔位 } //拼接所有欄位為一行資料 if (i<rowData.length-1) //不是最後一個元素 { // System.out.print("\""+field+"\""+","); fileOutputStream.write("\""+field+"\""+","); }else { //最後一個元素 fileOutputStream.write("\""+field+"\""); } } //建立一個新行 if (ite.hasNext()) { //fileOutputStream.newLine(); } } fileOutputStream.newLine(); //換行,建立一個新行; } fileOutputStream.flush(); }catch (Exception e) { flag = false; e.printStackTrace(); }finally { try{ fileOutputStream.close(); }catch (IOException e) { e.printStackTrace(); } } return flag; } }