将文件写入数组只会写入数组中的最后一条记录

时间:2017-08-02 08:08:39

标签: java arrays file operations

我想将我的控制台行打印到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 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

  • 如果多次打开和关闭文件确实有意义,您应该在追加模式下打开var string = "This is a test. This is only a test. Not an Exam" if string.range(of:"ex") != nil { print("yes") } if string.range(of:"ex", options: String.CompareOptions.caseInsensitive) != nil { print("yes") } (使用FileWriter)。