我正在编写一个Java程序,它在运行时将信息打印到文本文件中。在Eclipse中测试我的Mac程序时,它可以正常工作 - 创建文本文件并写入文件。我将程序导出到.jar文件以在不同的计算机上进行测试,当我在其他Mac计算机上运行.jar文件时,一切正常。但是,当我在Windows计算机上运行该程序时,会创建一个文件,但不会写入任何文件。我在不同的操作系统上搜索过Filewriter问题,但到目前为止还没有想出任何东西 - 想法?
下面是我用来写入文件的代码。它位于计时器任务中,并在每次执行时向文件写入角度值和时间戳。计时器任务中的其他所有内容在所有操作系统上都能正常运行,因此不是问题所在。如果有帮助,这里有一个文件示例:
1 270
2 30
3 26
4 29
等。第一列包含时间计数,第二列包含角度值。
代码:
public AnAngleTimerTask(Model newModel, int newCounter, int newEndAnalysis,
int newSampleEvery) {
model = newModel;
counter = newCounter;
endAnalysis = newEndAnalysis;
sampleEvery = newSampleEvery;
angles = new int[(int) Math
.floor((endAnalysis - counter) / sampleEvery)];
times = new int[(int) Math.floor((endAnalysis - counter) / sampleEvery)];
file = newFile();
}
@Override
public void run() {
PrintWriter out;
System.out.println(counter);
// get angle and write to file
if (!model.getTimer().getPaused()) {
int usbAngle = retrieveAngle();
times[i] = counter;
angles[i] = usbAngle;
try {
out = new PrintWriter(new BufferedWriter(new FileWriter(file, true)));
out.printf("%-10d %-10d\n", counter, usbAngle);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
model.setAngle(usbAngle);
i++;
counter = counter + sampleEvery;
}
if (counter == endAnalysis) {
model.setMeanAngle(angles);
model.setR(angles);
System.out.println("End Analysis");
cancel();
}
}
public File newFile() {
String nameString;
Date myDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd:HH-mm-ss");
String myDateString = sdf.format(myDate);
if (model.getArenaName() == null) {
nameString = "Arena" + model.getName() + "Tracker";
} else {
nameString = model.getArenaName();
}
File file = new File(model.getPath() + "/" + nameString + "_"
+ model.getName() + "_" + myDateString + ".txt");
model.setLastDataRecordedToFile(file.getAbsolutePath());
return file;
}
如果您需要任何其他信息或代码,请与我们联系。
答案 0 :(得分:0)
文件是空的吗?或者输出不是预期的。根据不同,改变
out.printf("%-10d %-10d\n", counter, usbAngle);
到
out.printf("%-10d %-10d%n", counter, usbAngle);
可能有所帮助。第一个发送原始换行符。第二个进行特定于平台的转换并在Windows上生成\ r \ n
答案 1 :(得分:0)
PrintWriter
吞下例外情况,你不会打电话给checkError()
看看是否有人发生过。尝试使用BufferedWriter
。当然,您必须使用printf()
之外的其他内容。
答案 2 :(得分:0)
经过一番试验和磨难后,我发现问题实际上是我使用的是带有冒号的文件名(由SimpleDateFormat生成),这在Mac上是允许的,但在Windows上是不允许的。摆脱了冒号,一切正常!