Java FileWriter Windows问题
我正在编写一个Java程序,在运行时将信息打印到文本文件中。在Eclipse中在Mac上测试我的程序时,它工作正常——创建文本文件和写入文本文件。我将我的程序导出到一个.jar文件,以便在不同的计算机上进行测试,当我在其他Mac计算机上运行.jar文件时,一切都正常工作。但是,当我在Windows计算机上运行该程序时,会创建一个文件,但不会写入任何内容。我已经在不同的操作系统上搜索了Filewriter问题,但到目前为止还没有找到任何想法——想法 下面是我用来写入文件的代码。它位于计时器任务中,每次执行时都会将角度值和时间戳写入文件。计时器任务中的所有其他内容都能在所有操作系统上正常工作,因此这不是问题所在。如果有帮助,下面是一个文件示例:Java FileWriter Windows问题,java,windows,filewriter,printwriter,bufferedwriter,Java,Windows,Filewriter,Printwriter,Bufferedwriter,我正在编写一个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;
}
如果您需要上下文的任何其他信息或代码,请告诉我。文件是否为空?或者输出不符合预期。视情况而定,从
out.printf("%-10d %-10d\n", counter, usbAngle);
到
也许会有帮助。对于第一个,它发送一个原始线路馈送。第二个执行特定于平台的转换,并在windows上生成一个\r\n异常,而不是调用
checkError()
。使用BufferedWriter
试试。当然,您必须使用除printf()之外的其他文件。经过一些尝试和磨难,我发现问题实际上是我使用了一个带有冒号的文件名(由SimpleDataFormat生成),这在Mac上是允许的,但在Windows上是不允许的。去掉冒号,一切正常 虽然这并没有解决我原来的文件为空的问题,但在解决文件写入问题后,这些信息有助于修复Windows上的格式设置--谢谢!
out.printf("%-10d %-10d%n", counter, usbAngle);