首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java FileWriter窗口问题

Java FileWriter窗口问题
EN

Stack Overflow用户
提问于 2014-06-30 05:29:19
回答 3查看 333关注 0票数 0

我正在编写一个Java程序,它在运行时将信息打印到一个文本文件中。在我的Mac上用Eclipse测试我的程序时,它工作正常--包括创建文本文件和写入文本文件。我将我的程序导出为.jar文件,以便在不同的计算机上进行测试,当我在其他Mac计算机上运行.jar文件时,一切都正常工作。但是,当我在Windows计算机上运行该程序时,创建了一个文件,但没有向其中写入任何内容。我已经在不同的操作系统上搜索了Filewriter问题,但到目前为止还没有找到任何东西--你觉得呢?

下面是我用来写入文件的代码。它在一个计时器任务中,在每次执行时向文件写入一个角度值和一个时间戳。计时器任务中的其他所有内容在所有操作系统上都能正常工作,所以这不是问题所在。如果有帮助,下面是一个文件的示例:

代码语言:javascript
复制
1    270
2    30
3    26
4    29

等等,其中第一列包含时间计数,第二列包含角度值。

代码:

代码语言:javascript
复制
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;
}

如果您需要任何其他信息或上下文代码,请让我知道。

EN

回答 3

Stack Overflow用户

发布于 2014-06-30 06:39:41

文件是空的吗?或者是输出不符合预期。根据这一点,从

代码语言:javascript
复制
out.printf("%-10d %-10d\n", counter, usbAngle);

代码语言:javascript
复制
out.printf("%-10d %-10d%n", counter, usbAngle);

也许能帮上忙。对于第一个,它发送一个原始换行符。第二个函数执行特定于平台的转换,并在windows上生成\r\n

票数 0
EN

Stack Overflow用户

发布于 2014-06-30 08:29:37

PrintWriter允许异常,并且您不会调用checkError()来查看是否发生了异常。用BufferedWriter试试吧。当然,您必须使用printf()以外的其他工具。

票数 0
EN

Stack Overflow用户

发布于 2014-07-13 05:45:12

经过一些尝试和磨难,我发现问题实际上是因为我使用了一个带有冒号的文件名(由SimpleDateFormat生成),这在Mac上是允许的,但在Windows上是不允许的。去掉冒号,一切都能正常工作!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24480450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档