【问题标题】:Java: print csv on different columns?Java:在不同的列上打印 csv?
【发布时间】:2017-04-27 10:00:50
【问题描述】:

我想在 CSV 文件上打印查询表结果。

我尝试使用此代码:

PrintWriter csvWriter = new PrintWriter(new File(path + "SqlClient_" + date + ".csv")) ;
ResultSetMetaData meta = rs.getMetaData() ; 
int numberOfColumns = meta.getColumnCount() ; 
String dataHeaders = "\"" + meta.getColumnName(1) + "\"" ; 
for (int i = 2 ; i < numberOfColumns + 1 ; i ++ ) { 
       dataHeaders += ",\"" + meta.getColumnName(i) + "\"" ;
    }
    csvWriter.println(dataHeaders) ;
    while (rs.next()) {
        String row = "\"" + rs.getString(1) + "\""  ; 
        for (int i = 2 ; i < numberOfColumns + 1 ; i ++ ) {
             row += ",\"" + rs.getString(i) + "\"" ;
        }
        csvWriter.println(row) ;
    }
    csvWriter.close();

这是我得到的:

title1","title2","title3"
"date1","date2","date3"
....

这是写在单个列中,而不是我想写在不同的列上,例如:

title1 | title2 | title3 
data1| data2 | data3 |

有一个特殊的命令可以将字符串分成不同的列吗?

【问题讨论】:

  • 如果我理解正确,您希望列由字符| 分隔,而不是","
  • 嗯,没有 xD xD 角色 |表示我是不同的列。
  • 所以如果我理解你的意思,你的 csv 文件将如下所示:Title1(一列)、Title 2(另一列)等?
  • 是的,没错。

标签: java sql csv multiple-columns


【解决方案1】:

为什么不为此使用 StringBuilder。假设您从数据库调用中获得了带有 YourClass 类型列表的结果集。调用以下实用程序并将 writer 传递给它。

伪代码:

public void writeToCSV(FileWriter writer){

StringBuilder sb=new StringBuilder();
for (YourClass data: yourresultSet){

sb.append("\"");
sb.append(data.getColumn1);
sb.append"\"";
sb.append(",\"")
sb.append(data.getColumn2);
sb.append("\"");
sb.append('\n'); //new line after the column

writer.write(sb.toString());
sb.delete(0,sb.length());

}

}

并测试你的结果

public class ReadCSV{

public static void main(String[] args) {

    String csvFile = "your.csv";
    BufferedReader br = null;
    String line = "";
    String cvsSplitBy = ",";

    try {

        br = new BufferedReader(new FileReader(csvFile));
        while ((line = br.readLine()) != null) {

            // use comma as separator
            String[] title= line.split(cvsSplitBy);

            System.out.println("Columns [Column1= " + title[0] + " , Column2=" + title[1] + "]");

        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br != null) {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}
}

【讨论】:

    【解决方案2】:

    CSV 文件使用分隔符来分隔列,所以我猜您的分隔符将是 ,(逗号)。

    您应该做的是打印以逗号分隔的标题的值,然后附加一个新的行分隔符 (\n) 以创建一个新列。与行值相同。

    请参阅此example 了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-19
      • 2023-04-09
      相关资源
      最近更新 更多