【问题标题】:Create CSV file using java使用 java 创建 CSV 文件
【发布时间】:2013-07-24 14:30:42
【问题描述】:

我将使用 java 创建 CSV 文件。以下是部分代码:

try{

    FileWriter writer = new FileWriter(sFileName);

    writer.append("Title");
    for(StoredArticle sa3:historyFile.keySet()){
        for(String k3:sa3.getTimeAndPopularity().keySet()){
            writer.append(',');
            writer.append(k3);
        }
    }
    writer.append('\n');

问题是我成功创建了 CSV 文件。在 for 循环中,k3 是以格式2013/07/22 15:40:23. 呈现的时间,但无法显示秒“23”。其他的表现不错。有什么问题请帮忙。

这是我全班的代码

package uk.ac.ncl.fanyaoxia.createCSV;

import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import uk.ac.ncl.fanyaoxia.monitor.MonitorRecentUpdates;
import uk.ac.ncl.fanyaoxia.monitor.StoredArticle;
import uk.ac.ncl.fanyaoxia.webpagefetch.ReadXml;

public class CreateCSVFile {
    private static Map < StoredArticle, ReadXml > historyFile;

    public CreateCSVFile() {
        historyFile = new HashMap < StoredArticle, ReadXml > ();
    }
    public void createFile() {
        generateCsvFile("HistoryTable.csv");
    }

    private static void generateCsvFile(String sFileName) {
        MonitorRecentUpdates csvFile = new MonitorRecentUpdates();
        historyFile = csvFile.getMap();
        try {

            FileWriter writer = new FileWriter(sFileName);

            writer.append("Title");
            for (StoredArticle sa3: historyFile.keySet()) {
                for (String k3: sa3.getTimeAndPopularity().keySet()) {
                    writer.append(',');
                    writer.append(k3);
                }
            }
            writer.append('\n');

            for (StoredArticle sa3: historyFile.keySet()) {
                writer.append(sa3.getStoredTitle());
                for (String k3: sa3.getTimeAndPopularity().keySet()) {
                    writer.append(',');
                    writer.append(sa3.getTimeAndPopularity().get(k3).toString());
                }
                writer.append('\n');
            }
            writer.flush();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

【问题讨论】:

  • 为什么不使用the available CSV libraries之一?
  • 首先您必须检查(或至少提供)您收藏的内容。如果将时间打印到控制台,它是否正确显示?
  • @assylias 因为 csv 非常简单,不需要依赖外部库,您必须在其中检查许可证条件。写一个“,”和一个新行,这就是你在 CSV 中所需要的
  • @AlexWien 没那么简单。例如,您的数据可能包含带有逗号的字符串,您需要将其包含在引号等中。最后它不是很复杂,但我没有看到导入一个小依赖项来为我处理它的任何问题,所以我可以继续前进。
  • @AlexWien 我只是说将&lt;dependency&gt;&lt;groupId&gt;net.sf.opencsv&lt;/groupId&gt;&lt;artifactId&gt;opencsv&lt;/artifactId&gt;&lt;/dependency&gt; 添加到我的maven 项目中更快更安全。在某个阶段,您可能也想解析文件,这使得处理转义引号变得更加困难。在你意识到之前,你还有 400 行需要维护。但这是无休止的讨论。

标签: java csv


【解决方案1】:

按照代码的预期输出秒数。它们在文本编辑器中可见。

它们只是在电子表格应用程序 MS Excel 中不可见。一种可能的原因是列宽太小。

[这个答案总结了上面我和OP的对话结果。]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    相关资源
    最近更新 更多