如何修复 Java 中文本文件在写字板和记事本中的格式差异?
How to fix formatting difference in Wordpad and Notepad for textfiles in Java?
我正在使用 Java 生成文件,但在不同的查看器中打开时无法正确设置格式。给出不同输出的程序是 WordPad
和 NotePad
.
控制台中程序的输出都是格式化的。此外,当我在 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,您的数据将正确对齐。
我正在使用 Java 生成文件,但在不同的查看器中打开时无法正确设置格式。给出不同输出的程序是 WordPad
和 NotePad
.
控制台中程序的输出都是格式化的。此外,当我在 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,您的数据将正确对齐。