我正在编写一个Java程序,它在运行时将信息打印到一个文本文件中。在我的Mac上用Eclipse测试我的程序时,它工作正常--包括创建文本文件和写入文本文件。我将我的程序导出为.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;
}如果您需要任何其他信息或上下文代码,请让我知道。
发布于 2014-06-30 06:39:41
文件是空的吗?或者是输出不符合预期。根据这一点,从
out.printf("%-10d %-10d\n", counter, usbAngle);至
out.printf("%-10d %-10d%n", counter, usbAngle);也许能帮上忙。对于第一个,它发送一个原始换行符。第二个函数执行特定于平台的转换,并在windows上生成\r\n
发布于 2014-06-30 08:29:37
PrintWriter允许异常,并且您不会调用checkError()来查看是否发生了异常。用BufferedWriter试试吧。当然,您必须使用printf()以外的其他工具。
发布于 2014-07-13 05:45:12
经过一些尝试和磨难,我发现问题实际上是因为我使用了一个带有冒号的文件名(由SimpleDateFormat生成),这在Mac上是允许的,但在Windows上是不允许的。去掉冒号,一切都能正常工作!
https://stackoverflow.com/questions/24480450
复制相似问题