【问题标题】:Java FileWriter Windows IssuesJava FileWriter Windows 问题
【发布时间】: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


    【解决方案1】:

    文件是空的吗?还是输出不符合预期。取决于此,从

    out.printf("%-10d %-10d\n", counter, usbAngle);
    

    out.printf("%-10d %-10d%n", counter, usbAngle);
    

    可能会有所帮助。第一个它发送原始换行符。第二个做平台特定的转换并在windows上生成一个\r\n

    【讨论】:

    • 虽然这并没有解决我原来的空文件问题,但在解决文件写入问题后,此信息有助于修复 Windows 上的格式 - 谢谢!
    【解决方案2】:

    PrintWriter 吞下异常,您不会调用 checkError() 来查看是否发生了异常。试试BufferedWriter。当然,您必须使用 printf() 以外的其他内容。

    【讨论】:

      【解决方案3】:

      经过一番试验和磨难,我发现问题实际上是我使用了一个带有冒号的文件名(由 SimpleDateFormat 生成),这在 Mac 上是允许的,但在 Windows 上是不允许的。摆脱了结肠,一切正常!

      【讨论】:

        猜你喜欢
        • 2011-10-16
        • 2016-03-03
        • 1970-01-01
        • 2011-05-21
        • 2010-12-09
        • 1970-01-01
        • 1970-01-01
        • 2021-10-05
        • 2011-08-11
        相关资源
        最近更新 更多