如何将对象序列化为CSV文件?
2022-09-01 10:43:23
我想将对象写入 CSV 文件。对于XML,我们有这样的
XStream,所以如果我想将对象转换为CSV,我们是否有任何这样的库?
编辑:我想将我的Bean列表传递给一个方法,该方法应将所有Bean字段写入CSV。
我想将对象写入 CSV 文件。对于XML,我们有这样的
XStream,所以如果我想将对象转换为CSV,我们是否有任何这样的库?
编辑:我想将我的Bean列表传递给一个方法,该方法应将所有Bean字段写入CSV。
首先,序列化是将对象“按原样”写入文件。AFAIK,您无法选择文件格式和所有格式。序列化对象(在文件中)具有自己的“文件格式”
如果要将对象(或对象列表)的内容写入CSV文件,可以自己操作,它不应该很复杂。
看起来Java CSV库可以做到这一点,但我自己还没有尝试过。
编辑:请参阅以下示例。这绝不是万无一失的,但您可以在此基础上进行构建。
//European countries use ";" as
//CSV separator because "," is their digit separator
private static final String CSV_SEPARATOR = ",";
private static void writeToCSV(ArrayList<Product> productList)
{
try
{
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("products.csv"), "UTF-8"));
for (Product product : productList)
{
StringBuffer oneLine = new StringBuffer();
oneLine.append(product.getId() <=0 ? "" : product.getId());
oneLine.append(CSV_SEPARATOR);
oneLine.append(product.getName().trim().length() == 0? "" : product.getName());
oneLine.append(CSV_SEPARATOR);
oneLine.append(product.getCostPrice() < 0 ? "" : product.getCostPrice());
oneLine.append(CSV_SEPARATOR);
oneLine.append(product.isVatApplicable() ? "Yes" : "No");
bw.write(oneLine.toString());
bw.newLine();
}
bw.flush();
bw.close();
}
catch (UnsupportedEncodingException e) {}
catch (FileNotFoundException e){}
catch (IOException e){}
}
这是产品(为了便于阅读,隐藏了 getter 和 setter):
class Product
{
private long id;
private String name;
private double costPrice;
private boolean vatApplicable;
}
这就是我测试的方式:
public static void main(String[] args)
{
ArrayList<Product> productList = new ArrayList<Product>();
productList.add(new Product(1, "Pen", 2.00, false));
productList.add(new Product(2, "TV", 300, true));
productList.add(new Product(3, "iPhone", 500, true));
writeToCSV(productList);
}
希望这有帮助。
干杯。
为了便于CSV访问,有一个名为OpenCSV的库。它真正简化了对CSV文件内容的访问。
编辑
根据您的更新,我认为所有以前的回复都是不正确的(因为它们的低级)。然后你可以走一条完全不同的方式,冬眠的方式,事实上!
通过使用 CsvJdbc 驱动程序,您可以将 CSV 文件作为 JDBC 数据源加载,然后直接将 Bean 映射到此数据源。
我本来会和你谈谈CSVObjects,但是由于该网站似乎坏了,我担心现在lib不可用。