我正在使用以下模式创建和写入文件:
File afile = new File("C:/dev/ws/DataOrdering/data/" + thisDate
+ "_" + thisTime + "_visdata.csv");
FileWriter writer = new FileWriter(afile);
writer.append(tradeDetails);
writer.close();
但是由于某种原因只写入了第一个文件,之后文件被创建为空 - 只有在特定时间有记录时才会创建它们,因为文件名是基于所采用的时间从记录中。我的完整方法打印在下面。 (我已编辑它以反映我所做的更改)。
public void createTimeFiles() throws IOException {
CSVReader reader = new CSVReader(new FileReader(
"C:/dev/ws/DataOrdering/data/visdata.csv"));
String[] nextLine;
String lastTime = "";
String code, date, hour, min, sec, offset, type, price, volume, bid, ask, headline;
HashMap<Integer, FileWriter> writers = new HashMap<Integer, FileWriter>();
while ((nextLine = reader.readNext()) != null) {
String thisDate = nextLine[1];
String thisTime = nextLine[2].substring(0, 5);
code = nextLine[0];
date = nextLine[1];
hour = nextLine[2].substring(0, 2);
min = nextLine[2].substring(3, 5);
sec = nextLine[2].substring(6);
offset = nextLine[3];
type = nextLine[4];
price = nextLine[5];
volume = nextLine[6];
bid = nextLine[7];
ask = nextLine[7];
headline = nextLine[7];
// System.out.println(thisDate + " - " + thisTime + " - " + hour
// + " - " + min);
String tradeDetails = code + " _ " + date + " _ " + hour + " _ "
+ min + " _ " + sec + " _ " + offset + " _ " + type + " _ "
+ price + " _ " + volume + " _ " + bid + " _ " + ask
+ " _ " + headline;
File afile = new File("C:/dev/ws/DataOrdering/data/" + thisDate
+ "_" + thisTime + "_visdata.csv");
if (afile.exists()) {
FileWriter writer = new FileWriter(afile);
writer.append(tradeDetails);
writer.close();
} else {
System.out.println("the file exists");
FileWriter writer = new FileWriter(afile);
writer.write(tradeDetails);
writer.close();
}
}
}
答案 0 :(得分:2)
文件是否存在?你是附加的,而不是写作......
答案 1 :(得分:1)
检查“ !
”
if (!afile.exists()) { // here
System.out.println("the file exists");
FileWriter writer = new FileWriter(afile);
writer.append(tradeDetails);
writer.close();
} else {
FileWriter writer = new FileWriter(afile);
writer.append(tradeDetails);
writer.close();
}
为什么你做两次相同的?如果该文件不存在。你必须写,而不是追加。
文件夹也可能不存在。
aFile.getParentFile().mkdirs();
如果父文件夹已存在,则没有问题。
答案 2 :(得分:0)
也许visdata.csv不存在或者不包含任何数据,因此不会写任何内容。
C:/dev/ws/DataOrdering/data/visdata.csv
是否存在?
答案 3 :(得分:0)
呼叫
writer.flush();
之前打电话
writer.close();