我的Java程序没有生成CSV输出

时间:2014-08-12 10:08:11

标签: java csv netbeans jpql

我的解释可能不太清楚,抱歉!

我正在使用NetBeans IDE 8.0来创建Java项目。我是Java编程的初学者,上周三才开始工作。另外,对于我的CSV,我使用以下库:CSVReader

我的导师告诉我创建一个以CSV格式输出数据的程序,这样我就可以转到CSV文件并制作数据图表。它的作用是使用JPQL获取在线数据库中文件的数据大小(Long)和创建时间(XML Gregorian Calendar)。如果您想阅读这里的架构:[SCHEMA](http://icatproject.org/mvn/site/icat/server/4.3.2/icat.core/schema.html#Datafile" ICAT架构")。

似乎该程序能够找到数据文件(我使用调试器检查:2天范围内的8个文件),但它似乎不会将数据输出为CSV,即使它创建了CSV文件。在我的代码中,将有一个数据计数部分,我还没有完成。此外,用户可以输入他们想要数据的日期范围,尽管出于测试目的,我已将该部分作为评论,以便我有一个小范围。你可以检查我的代码(我已经删除了任何不必要的信息。比如登录部分):

    String outputFileCount = "C:\\Users\\me\\Documents\\CSV\\dataByCount.csv";
    String outputFileSize = "C:\\Users\\me\\Documents\\CSV\\dataBySize.csv";
    boolean alreadyExistsCount = new File(outputFileCount).exists();
    boolean alreadyExistsSize = new File(outputFileSize).exists();

    String FileSize;
    Long DatafileCount;
    Calendar calendar;
    SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss");
    String Date;

    List<Object> dfSearch = null;

    CsvWriter csvOutputCount = new CsvWriter(new FileWriter(outputFileCount, true), ',');
    CsvWriter csvOutputSize = new CsvWriter(new FileWriter(outputFileSize, true), ',');

    if (typeOutput.equals("count")) {
            if (!alreadyExistsCount) {
                csvOutputCount.write("DataFile Create Time");
                csvOutputCount.write("Datafile Count");
                csvOutputCount.endRecord();
            }

    } else if (typeOutput.equals("size")){
            if (!alreadyExistsSize) {
                csvOutputSize.write("DataFile Create Time");
                csvOutputSize.write("DataFile Size");
                csvOutputSize.endRecord();
            }

                inputDates = "SELECT d FROM Datafile d WHERE d.datafileCreateTime BETWEEN {ts  2013-12-01 00:00:00}  AND {ts 2013-12-02 23:59:59}";
                dfSearch = icat.search(sessionId, inputDates);
                for (Object datafile : dfSearch) {

                    Datafile dFile = (Datafile) datafile;

                    calendar = dFile.getDatafileCreateTime().toGregorianCalendar();
                    formatter.setTimeZone(calendar.getTimeZone());
                    Date = formatter.format(calendar.getTime());
                    csvOutputSize.write(Date);  //Convert XMLGregorianCalendar to String

                    FileSize = Long.toString(dFile.getFileSize());
                    csvOutputSize.write(FileSize); //Convert long to String

                    csvOutputSize.endRecord();


            }

    }
}

}

2 个答案:

答案 0 :(得分:2)

完成后,在CsvWriters上调用flush()(和close())。

答案 1 :(得分:0)

使用try-catch-finally块:

CsvWriter csvOutputCount = null; 
CsvWriter csvOutputSize = null;
try
{
    csvOutputCount = new CsvWriter(new FileWriter(outputFileCount, true), ',');
    csvOutputSize = new CsvWriter(new FileWriter(outputFileSize, true), ',');
    ...
}
catch(Exception e)
{
    e.printStackTrace();
}
finally
{
    if(csvOutputCount != null)
    {
       csvOutputCount.close();
    }
    if(csvOutputSize != null)
    {
       csvOutputSize.close();
    }
}