2011-08-23 248 views
4

我正在开发一个小型java应用程序。在某些时候,我正在用纯文本文件写入一些数据。使用下面的代码:Java:如何将格式化输出写入纯文本文件

Writer Candidateoutput = null; 
File Candidatefile = new File("Candidates.txt"), 
Candidateoutput = new BufferedWriter(new FileWriter(Candidatefile)); 
Candidateoutput.write("\n Write this text on next line"); 
Candidateoutput.write("\t This is indented text"); 
Candidateoutput.close(); 

现在,每件事情都很好,该文件与预期的文本创建。唯一的问题是文本没有格式化,所有的文本都在单行上。但是,如果我复制并粘贴MS Word中的文本,则文本会自动格式化。

在纯文本文件中是否有任何方法来保存文本格式?

注:文本格式我指的是\n\t只有

回答

4

对于新生产线使用System.getProperty("line.separator") - 这是获取换行分隔符的平台无关的方式。 (在Windows上,\r\n,在Linux上的\n

此外,如果这是将要使用\t在非Windows机器上运行,避免 - 用X(四)个空格代替。

1

好视窗预计换行和回车字符以表示一个新行。所以你想做\ r \ n来使它工作。

1

窗口的记事本需要\r\n来正确显示一个新行。记事本仅忽略\n

3

您可以使用line.separator系统属性来解决您的问题。

E.g.

String separator = System.getProperty("line.separator"); 

Writer Candidateoutput = null; 
File Candidatefile = new File("Candidates.txt"), 
Candidateoutput = new BufferedWriter(new FileWriter(Candidatefile)); 
Candidateoutput.write(separator + " Write this text on next line"); 
Candidateoutput.write("\t This is indented text"); 
Candidateoutput.close(); 

line.separator系统属性是从环境中获取一个换行符的平台无关的方式。

2

你将不得不使用Java工具格式化可以在这里找到:java.util.Formatter

然后,所有你必须做的就是创建Formatter类型的对象,如这样的:

private Formatter output; 

在这种情况下,output将是您正在写入的输出文件。

然后,你必须将文件名传递给输出对象是这样的:

output = new Formatter("name.of.your.file.txt") 

一旦这样做了,你可以硬编码的文件内容使用output.format命令类似于输出文件到System.out.printlnprintf命令。

或者使用Scanner实用程序将数据输入到内存中,然后使用output.format将此数据输出到输出对象或文件。

这是一个关于如何写一个记录输出的例子:

output.format("%d %s %s %2f\n" , field1.decimal, field2.string, field3.string, field4.double) 

还有比这更给它一点点,但这肯定比分析数据,或者使用大量复杂的第三方插件。

要读取这个文件,你会重定向扫描仪实用程序来读取文件而不是控制台:

input = new Scanner(new File("name.of.your.file.txt")