我的解释可能不太清楚,抱歉!
我正在使用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();
}
}
}
}
答案 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();
}
}