【发布时间】:2014-06-29 21:29:18
【问题描述】:
我正在编写一个在运行时将信息打印到文本文件的 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;
}
如果您需要任何其他信息或上下文代码,请告诉我。
【问题讨论】:
标签: java windows filewriter printwriter bufferedwriter