2013-01-15 56 views
0

我想从文件读取并写入文件。输入文件如下读写文件 - Java空格

<ORLANDO> <0%> 
    As I remember, Adam, it was upon this fashion bequeathed me by will but poor a thousand crowns, and, as thou sayest, 
<ORLANDO> 

"A s I r e m e m b e r A d a m i t w a s u p o n t h i s f a s h i o n b e q u e a t h e d m e b y w i l l b u t p o o r a t h o u s a n d c r o w n s a n d a s t h o u s a y e s t c h a r g e d m y b r o t h e r o n ..." 

我已经写了一个java程序来删除带标记的行,也用空格替换任何标点符号。但是每个写出来的字母之间都有一个空格,而且在两行之间还有很多空行。如何删除它们? 。请帮忙。

String line=null; 
    try { 
     BufferedReader br=new BufferedReader(new FileReader("filename")); 
     PrintWriter writer = new PrintWriter(new FileWriter("filename")); 
    try { 
      while((line=br.readLine())!=null) 
      { 

       if(!line.contains("<")) 
       { 
        line=(line.replaceAll("\\p{Punct}","")); 

        writer.println(line); 
        writer.flush(); 


       } 
      } 
} 
+1

运行代码,无法重复您的问题。输入文件的编码是什么? – jlordo

+1

代码对我来说工作正常..我所做的只是删除了额外的'try'你有..检查编码问题。 – RadAl

回答

0

你是否用正确的编码打开了书面文件。它看起来像你写UTF-8并用ASCII或任何ISO-8859编码打开它。

+1

更可能是其他方式 - 如果原始文件是UTF-16,并且您正在将其作为Windows-1252读取,那么您将在每个真实字符之间得到一个零。 –

4

当您使用PrintWriter打开文件时,它会截断该文件。您可以将其设置为追加,但无论如何您无法用这种方法重写您正在阅读的文件。

相反,您应该创建一个新文件并写入该文件。当你完成后,你可以删除原件并重命名副本(或删除副本,如果它是完全一样的)

但写出的每个字母之间有一个空格,也在两行之间很多空白行存在。

这会发生在您编写的UTF-16上,但将其作为ASCII或UTF-8读取。避免这种情况的方法是不使用默认的UTF-16。

try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("filename"), StandardCharsets.UTF_8)); 
    PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("filename.tmp"), StandardCharsets.UTF_8))) { 
    for(String line; (line = br.readLine())!=null;) { 
     pw.println(line.replaceAll("<[^>]+>", "")); 
    } 
} 
+0

我假设不同的文件将用于阅读和写作。 +1为您的洞察力.. :) – RadAl

+1

+1。最近发现了这种错误...... – fge