如何修复 Java 中文本文件在写字板和记事本中的格式差异?

How to fix formatting difference in Wordpad and Notepad for textfiles in Java?

我正在使用 Java 生成文件,但在不同的查看器中打开时无法正确设置格式。给出不同输出的程序是 WordPadNotePad.

控制台中程序的输出都是格式化的。此外,当我在 WordPad 中查看文件时,它的格式也很好。但是当我打开NotePad中的文件时,它全乱了。

它在 NotePad 中看起来非常糟糕,我不希望最终用户在 NotePad 中打开它时看到一团糟。

有没有办法在 Java 中正确设置文本格式,以便任何文本 reader 都能按照我的预期呈现?

我正在使用 String.format() 来格式化我的字符串。

编辑: 这是我用来写出信息的一些核心代码。

private void retrieveOrderInfo(ArrayList<String> order) {
    int row = orderTable.getRowCount();
    String descr[] = new String[row];
    double price[] = new double[row];
    String info;
    readOrderTable(descr, price);
    for (int i = 0; i < row; i++) {
        info = String.format(" %-45s %-20.1f ", descr[i], price[i]);
        order.add(info);
    }
}

private void writeString(String path, String info, boolean line) {
    DataRW write = new DataRW();
    write.writeFileExternal(path, info, line);
}

这是我的 DataRW class。

public void writeFileExternal(String fileName, String info, boolean line) {
    BufferedWriter bwriter = null;
    try {
        FileWriter fwriter = new FileWriter(fileName, true);
        bwriter = new BufferedWriter(fwriter);
        bwriter.write(info);
        if (line) {
            bwriter.newLine();
        }
        bwriter.flush();
    } catch (IOException e) {
        //e.printStackTrace();
        //System.out.println("Could note write to " + fileName);
        errorMessageNotify("writeexternalfile", fileName);
    } finally {
        if (bwriter != null) {
            try {
                bwriter.close();
            } catch (IOException e) {
                //Just ignore if couldnt close
            }
        }
    }
}

所以我得到了信息,然后用这些方法调用把它写出来。

编辑:图片链接 http://i1248.photobucket.com/albums/hh489/EberronBruce/NotepadDemo_zpsangaprji.jpg

http://i1248.photobucket.com/albums/hh489/EberronBruce/wordpad_zpscbu0adkb.jpg

这里有图片链接来描述我的意思。我没有足够的声誉点数来直接发布图像。

非常感谢所有帮助。很长一段时间以来,我一直在努力解决这个问题。我尝试使用 \t 并调整格式以使其看起来正确,但一旦我让它在记事本下看起来正确,它就会在写字板、MS Word 和 FireFox 中消失。

我猜测生成的代码使用了 UNIX 换行符。写字板在 UNIX 换行符处中断。记事本没有。

如果您想要 OS 的正确休息时间,请使用 System.getProperty("line.separator")

编辑: 现在我们有了屏幕截图,我可以说您的问题出在记事本上。将字体更改为固定宽度的字体,例如 Courier,您的数据将正确对齐。