Java 控制台输出和文件输出似乎不同

Java 控制台输出和文件输出似乎不同,java,Java,所以我在做这个程序,我在指定的文件夹中浏览每个文件夹,如果文件夹中有任何文件,我会阅读它们 这些文件如下所示: file name: grades Mait 5 5 5 Kati 3 3 3 Vello 4 4 4 所以我读入每一行,每一行的第0个元素是我添加到数组中的学生的名字。然后我计算分数,然后计算中位数 文件也位于以类名命名的文件夹中。例如,数学有它的每一个数学成绩 现在程序的任务是读取所有这些文件,然后生成一个输出文件,其中包含每个班级的每个学生的名字和他们的中位数,然后是他们所有

所以我在做这个程序,我在指定的文件夹中浏览每个文件夹,如果文件夹中有任何文件,我会阅读它们

这些文件如下所示:

file name: grades

Mait 5 5 5
Kati 3 3 3
Vello 4 4 4
所以我读入每一行,每一行的第0个元素是我添加到数组中的学生的名字。然后我计算分数,然后计算中位数

文件也位于以类名命名的文件夹中。例如,数学有它的每一个数学成绩

现在程序的任务是读取所有这些文件,然后生成一个输出文件,其中包含每个班级的每个学生的名字和他们的中位数,然后是他们所有成绩的中位数

这就是我的输出现在的样子:

Nimi: Mait Keskmine hinne: 5.0 Aine: ..\text\students\english\grades
Nimi: Kati Keskmine hinne: 3.0 Aine: ..\text\students\english\grades
Nimi: Vello Keskmine hinne: 4.0 Aine: ..\text\students\english\grades
Nimi: Mait Keskmine hinne: 1.0 Aine: ..\text\students\math\grades
Nimi: Kati Keskmine hinne: 2.0 Aine: ..\text\students\math\grades
它不是用英语写的,而是用名称:,中间值;,的形式,类名

现在的问题是,当我将相同的内容打印到控制台时,我得到的不是文件,而是:

Nimi: Mait Keskmine hinne: 5.0 Aine: ..\text\students\english\grades
Nimi: Kati Keskmine hinne: 3.0 Aine: ..\text\students\english\grades
Nimi: Vello Keskmine hinne: 4.0 Aine: ..\text\students\english\grades
Nimi: Mait Keskmine hinne: 5.0 Aine: ..\text\students\english\grades
Nimi: Kati Keskmine hinne: 3.0 Aine: ..\text\students\english\grades
Nimi: Vello Keskmine hinne: 4.0 Aine: ..\text\students\english\grades
Nimi: Mait Keskmine hinne: 1.0 Aine: ..\text\students\math\grades
Nimi: Kati Keskmine hinne: 2.0 Aine: ..\text\students\math\grades
现在,正如您所看到的,由于某种原因,读取的第一个文件被复制了。当我只有一个文件夹可供程序读取时,不会出现此问题。但对于更多的文件夹,它确实如此

为什么这对我来说是个问题?因为当我的程序中有重复的值时,我不知道如何计算一个学生在学校取得的所有成绩的中位数

这里可能有什么问题,我如何解决

以下是我在项目中的所有类,以便大家可以看到代码:

Main.java:

package files;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

public class Main {

    public static void main(String[] args) throws FileNotFoundException {

        Path lessons = Paths.get("../text/students");
        FileVisitor file = new FileVisitor();
        try {
            Files.walkFileTree(lessons, file);
        } catch (IOException e) {
            e.printStackTrace();
        }

        List<Path> files = file.askFiles();
        List<Student> students = new ArrayList<>();

        for(Path adress:files){
            //System.out.println(adress.getFileName());
            try {
                BufferedReader textIn = new BufferedReader(new FileReader(adress.toString()));
                String line;
                while((line = textIn.readLine()) != null){
                    String[] readContent = line.split(" ");
                    Student student = new Student(readContent[0],adress.toString());
                    //System.out.println("sad");
                    for(int i = 1;i < readContent.length; i++){
                        student.addGrade(readContent[i]);
                        //System.out.println(adress.getParent()+ " ");
                    }
                    students.add(student);
                }
                PrintWriter output = new PrintWriter(new FileWriter("../text/opilased_out"));
                for(Student i:students){
                    output.println("Nimi: "+i.askName() + " " + "Keskmine hinne: "+i.askMedian() + " " + "Aine: "+i.askSubject());
                    System.out.println("Nimi: "+i.askName() + " " + "Keskmine hinne: "+i.askMedian() + " " + "Aine: "+i.askSubject());
                }
                output.close();
            } catch (IOException e) {
                e.printStackTrace();
                }   
        }
    }
}
包文件;
导入java.io.BufferedReader;
导入java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.io.FileWriter;
导入java.io.IOException;
导入java.io.PrintWriter;
导入java.nio.file.Files;
导入java.nio.file.Path;
导入java.nio.file.path;
导入java.util.ArrayList;
导入java.util.List;
公共班机{
公共静态void main(字符串[]args)引发FileNotFoundException{
路径课程=路径。获取(“../text/students”);
FileVisitor file=newfilevisitor();
试一试{
walkFileTree(课程,文件);
}捕获(IOE异常){
e、 printStackTrace();
}
列表文件=file.askFiles();
List students=new ArrayList();
for(路径地址:文件){
//System.out.println(address.getFileName());
试一试{
BufferedReader textIn=新的BufferedReader(新文件读取器(address.toString());
弦线;
而((line=textIn.readLine())!=null){
String[]readContent=line.split(“”);
学生=新学生(readContent[0],address.toString());
//System.out.println(“sad”);
for(int i=1;i
Student.java:

package files;

import java.util.ArrayList;
import java.util.List;

public class Student {
    String studentName;
    List<Integer> studentGrades = new ArrayList<>();
    String subjectName;
    double sum;

    public Student(String name, String subject) {
        subjectName = subject;
        studentName = name;
    }

    public String askSubject(){
        return subjectName;
    }

    public String askName(){
        return studentName;
    }


    public void addGrade(String grade) {
        studentGrades.add(Integer.parseInt(grade));
        //System.out.println(studentGrades);
        for (int i = 0;i < studentGrades.size(); i++){
            //System.out.println(studentGrades.get(i));
        }
    }

    public double askMedian() {
        double median = 0;
        for (int i = 0;i < studentGrades.size(); i++){
            //System.out.println(studentGrades.get(i));
            median += studentGrades.get(i);
            sum = median/studentGrades.size();
        }
        //System.out.println(studentGrades);
        //System.out.println(sum);
        return sum;
    }
}
包文件;
导入java.util.ArrayList;
导入java.util.List;
公立班学生{
字符串studentName;
List studentGrades=new ArrayList();
字符串subjectName;
双和;
公立学生(字符串名称、字符串主题){
subjectName=受试者;
studentName=姓名;
}
公共字符串askSubject(){
返回subjectName;
}
公共字符串askName(){
返回学生姓名;
}
公共坡率(字符串坡率){
add(Integer.parseInt(grade));
//系统输出打印LN(学生成绩);
对于(int i=0;i
FileVisitor.java:

package files;

import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.List;

public class FileVisitor extends SimpleFileVisitor<Path> {

    private List<Path> adresses = new ArrayList<>();

    @Override
    public FileVisitResult postVisitDirectory(Path dir, IOException exc)
            throws IOException {
        return super.postVisitDirectory(dir, exc);
    }

    @Override
    public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
            throws IOException {
        return super.preVisitDirectory(dir, attrs);
    }

    @Override
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
            throws IOException {
        adresses.add(file);
        //System.out.println(file);
        return super.visitFile(file, attrs);
    }

    @Override
    public FileVisitResult visitFileFailed(Path file, IOException exc)
            throws IOException {
        return super.visitFileFailed(file, exc);
    }

    public List<Path> askFiles(){
        return adresses;
    }
}
包文件;
导入java.io.IOException;
导入java.nio.file.FileVisitResult;
导入java.nio.file.Path;
导入java.nio.file.SimpleFileVisitor;
导入java.nio.file.attribute.BasicFileAttributes;
导入java.util.ArrayList;
导入java.util.List;
公共类FileVisitor扩展了SimpleFileVisitor{
私有列表地址=新的ArrayList();
@凌驾
公共文件VisitResult postVisitDirectory(路径目录,IOException exc)
抛出IOException{
返回超级访问后目录(目录,exc);
}
@凌驾
公共文件VisitResult preVisitDirectory(路径目录,基本文件属性属性属性)
抛出IOException{
返回super.preVisitDirectory(dir,attrs);
}
@凌驾
公共文件VisitResult visitFile(路径文件,基本文件属性属性属性)
抛出IOException{
address.add(文件);
//System.out.println(文件);
返回super.visitFile(文件,attrs);
}
@凌驾
公共文件VisitResult visitFileFailed(路径文件,IOException exc)
抛出IOException{
返回super.visitFileFailed(文件,exc);
}
公共列表askFiles(){
回信地址;
}
}
任何帮助都是真实的