【问题标题】:Java wont Write all to fileJava不会将所有内容写入文件
【发布时间】:2014-11-14 18:38:46
【问题描述】:

我正在尝试做一个作业,但我不知道为什么它不会将所有收集到的数据写入一个文本文件。基本上我需要读取一个名为'marks'的.txt文件,输出它(它确实如此)然后将它分类为两个文件 - 如果等级小于50,它将进入fail.txt,如果它是50或更高它将把它放在 pass.txt 中。它只取来自marks.txt 的第一个传球并将其放入pass.txt 和一个来自marks.txt 我需要对所有8 个进行排序。

这是出处:

import java.io.*;  

public class WriteKONG {  
public static BufferedReader read;  
public static PrintWriter WriteToPass;  
public static PrintWriter WriteToFail;  
public static String line;  


public static void main(String[] args) throws IOException  {  
        read = new BufferedReader(new FileReader("src/marks.txt"));  
        WriteToPass = new PrintWriter(new FileWriter("pass.txt"));  
        WriteToFail = new PrintWriter(new FileWriter("fail.txt"));  
        String StudentID;  
        String Course;  
        String MarkS;  
        int Mark;  

        line = read.readLine();  

        while(line != null)  
        {  
            sort();  
        }  


}  


 public static void sort() throws IOException  
{  

    read = new BufferedReader(new FileReader("src/marks.txt"));  
    WriteToPass = new PrintWriter(new FileWriter("pass.txt"));  
    WriteToFail = new PrintWriter(new FileWriter("fail.txt"));  
    String StudentID;  
    String Course;  
    String SMark;
    int Mark;  
    while (line != null) {
        line = read.readLine();  
        StudentID = line;  
        System.out.println("StudentID = " + StudentID);  

        line = read.readLine();  
        Course = line;  
        System.out.println("Course = " + Course);  

        line = read.readLine();
        SMark = line;  
        System.out.println("Mark = " + SMark + "\n");  

        Mark = Integer.valueOf(SMark);
        if(Mark >= 50)  
        {  
            WriteToPass.println(StudentID);  
            WriteToPass.println(Course);  
            WriteToPass.println(SMark);  
            WriteTopass.close();  
        }  

        else  
        {  
            WriteToFail.println(StudentID);  
            WriteToFail.println(Course);  
            WriteToFail.println(SMark);  
            WriteToFail.println(line);  
            WriteToFail.close();  
        }  

    }   

 } 
 }

这是marks.txt:

75676881
English
94
75676883
Math
78
75676885
Physics
24
75676887
Chemistry
89
75676889
English
35
75676891
History
24

【问题讨论】:

  • 你确定WriteToPass.println(SMark); WriteToFail.close();
  • @njzk2 我切换了它仍然无法正常工作。
  • 阅读FileWriter的文档,你可能想在append模式下打开文件

标签: java readline readfile writefile


【解决方案1】:

您将在第一次迭代后关闭WriteToFail,并且永远不会关闭WriteToPass

你应该只在循环之后关闭这两个文件:

line = read.readLine();
while (line != null) {  
    StudentID = line;  
    System.out.println("StudentID = " + StudentID);  

    line = read.readLine();  
    Course = line;  
    System.out.println("Course = " + Course);  

    line = read.readLine();
    SMark = line;  
    System.out.println("Mark = " + SMark + "\n");  

    Mark = Integer.valueOf(SMark);
    if(Mark >= 50)  
    {  
        WriteToPass.println(StudentID);  
        WriteToPass.println(Course);  
        WriteToPass.println(SMark);  
    }  
    else  
    {  
        WriteToFail.println(StudentID);  
        WriteToFail.println(Course);  
        WriteToFail.println(SMark);  
        WriteToFail.println(line);  
    }  
    line = read.readLine();
}   
WriteToPass.close();  
WriteToFail.close();  

我刚刚注意到您在 main 方法和 sort 方法中打开文件。我认为没有理由这样做。您的 main 应该只调用 sort :

public static void main(String[] args) throws IOException  
{  
    sort();
}

【讨论】:

  • 我改了,还是只放一行。
  • 刚刚试了你发的,还是不行]:
  • 实际上我在 main 中有一个错误,所以也许这就是它没有完全运行循环的原因,所以直到那个时候它才会运行?
  • 我试过了,要么它甚至不输出它,要么以不同的顺序输出它并且不写它,我尝试了你所说的不同变体。
  • 我很抱歉,没有注意到最后一个,但谢谢!效果很好!
【解决方案2】:

试试

WriteToPass = new PrintWriter(new FileWriter("pass.txt",true));

【讨论】:

  • 不会改变任何东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-05
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-12
  • 2016-09-28
相关资源
最近更新 更多