2017-08-02 75 views
-1

我想将控制台行打印到txt文件。我希望在else语句中执行此操作,但它只写入文件最后一条记录。如何修复它?当我尝试缓冲读者它无法解决我的问题。感谢大家。有一个美好的一天。你给我的建议是哪种解决方案?将文件写入数组只写入数组中的最后一条记录

for(int iy=0;iy<arr.length;iy++){ 

    if(arr[iy].contains("•") || arr[iy].contains("Contact") || arr[iy].contains("@") || arr[iy].contains("Activities and Societies") || arr[iy].contains("Page")){ 

    }    
    else if(arr[iy].contains("Summary")){ 
     //System.out.println(arr[iy]+"enes"); 
     while(exit==false){ 
      iy++; 

      if(arr[iy].contains("Experience")){ 
       exit=true; 
      } 
     }   
    }    
    else if(arr[iy].contains("Skills") || arr[iy].contains("Languages")){ 

     while(exit==false){ 
      iy++; 

      if(arr[iy].contains("Education")){ 
       exit=true; 
      } 
     } 
    }        
    else 
    {     
     System.out.println(arr[iy]); 

     try(PrintWriter bw = new PrintWriter(new FileWriter(FILENAME2))){ 

      bw.write(arr[iy]); 
      //out.newLine(); 
      bw.flush(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    }      
} 
+2

欢迎来到Stack Overflow!寻求调试帮助的问题(“为什么这个代码不工作?”)必须包含所需的行为,特定的问题或错误以及在问题本身中重现问题所需的最短代码。没有明确问题陈述的问题对其他读者无益。请参阅:如何创建[mcve]。使用“编辑”链接来改善你的*问题* - 不要通过评论添加更多信息。谢谢! – GhostCat

+2

除此之外:您希望我们花* *时间来帮助您解决问题。你应该尽可能简单。因此,请花1分钟时间来正确缩进/格式化所有源代码。你知道,*预览*窗口存在的原因 - 围绕编辑窗口的许多解释相同。 – GhostCat

+2

最后:阅读关于* clean *的代码。这段代码难以阅读的次数比它应该多10倍(不仅因为懒惰的格式化,而且还因为结构过于复杂)。毫无疑问,您需要其他人来确定这个混乱中的问题。 – GhostCat

回答

0

您的代码非常复杂,但最后一行写入的原因很明显 - 您打开要输出的每一行的文件,并覆盖该文件的以前内容。

  • 您不应该打开和关闭每行的文件。在循环之前打开一次,并在循环之后关闭它。

  • 如果多次打开和关闭文件确实有意义,则应该以附加模式打开FileWriter(使用new FileWriter(FILENAME2,true))。

+0

谢谢伊兰我尝试第二个选项,它解决了,但在一行中的txt文件句子,你知道我怎么能添加数组元素之间的换行符? – TheFlash

+0

@TheFlash'bw.println(arr [iy]);' – Eran

0

看起来您正在循环的每一步重新创建PrintWriter,这会覆盖文件。在循环之前创建它,然后关闭它。