Java FileWriter Windows问题

Java FileWriter Windows问题,java,windows,filewriter,printwriter,bufferedwriter,Java,Windows,Filewriter,Printwriter,Bufferedwriter,我正在编写一个Java程序,在运行时将信息打印到文本文件中。在Eclipse中在Mac上测试我的程序时,它工作正常——创建文本文件和写入文本文件。我将我的程序导出到一个.jar文件,以便在不同的计算机上进行测试,当我在其他Mac计算机上运行.jar文件时,一切都正常工作。但是,当我在Windows计算机上运行该程序时,会创建一个文件,但不会写入任何内容。我已经在不同的操作系统上搜索了Filewriter问题,但到目前为止还没有找到任何想法——想法 下面是我用来写入文件的代码。它位于计时器任务中,

我正在编写一个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);