Java FileWriter Windows问题

时间:2014-06-29 21:29:19

标签: 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;
}

如果您需要任何其他信息或代码,请与我们联系。

3 个答案:

答案 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上是不允许的。摆脱了冒号,一切正常!