File 组织导入的文本文件、字符或字符串?

File 组织导入的文本文件、字符或字符串?,file,text,import,bufferedreader,organization,File,Text,Import,Bufferedreader,Organization,我有一个文本文件,如下所示: 3333(等)是一个学生ID号,后面的三个数字是他/她的考试成绩。前两个测试分数的权重为0.3,第三个测试分数的权重为0.4。零只是用来分隔类 我有一个缓冲读取器来输入所有数据,但我不知道下一步该怎么做。我是否转换为字符数组?或者我将每个#保存为int并使用数学函数 我现在只有这个,只是为了看文件 import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException;

我有一个文本文件,如下所示:

3333(等)是一个学生ID号,后面的三个数字是他/她的考试成绩。前两个测试分数的权重为0.3,第三个测试分数的权重为0.4。零只是用来分隔类

我有一个缓冲读取器来输入所有数据,但我不知道下一步该怎么做。我是否转换为字符数组?或者我将每个#保存为int并使用数学函数

我现在只有这个,只是为了看文件

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class Jose_courseData {
public static void main(String[]args) {
    try (BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\Jose\\Documents\\Loops\\courseData.txt")))
    {

        String sCurrentLine;

        while ((sCurrentLine = br.readLine()) != null) {
            System.out.println(sCurrentLine);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } 

}
文本文件如下所示

    0.30 0.30 0.40
    161
    3333 70 60 50
    4444 50 50 50
    5555 80 90 80
    0
    162
    1212 90 85 92
    6666 60 80 90
    7777 90 90 90
    8888 95 87 93
    9999 75 77 73
    0
    263
    2222 90 65 75
    8989 60 40 60
    9090 70 80 30
    0
我需要把课文整理好,然后平均分数。下面是它应该是什么样子

Grade Data For Class 161
ID Programs Midterm Final Weighted Average Programs grade
-- -------- ------- ----- ---------------- --------------
3333 70 60 50 59.00 Pass
4444 50 50 50 50.00 Fail
5555 80 90 80 83.00 Pass
Class Average: 64.00

Grade Data For Class 162
ID Programs Midterm Final Weighted Average Programs grade
-- -------- ------- ----- ---------------- --------------
1212 90 85 92 ... Pass
6666 60 80 90 ... Fail
7777 90 90 90 ... Pass
8888 95 87 93 ... Pass
9999 75 77 73 ... Pass
Class Average: ...

Grade Data For Class 263
ID Programs Midterm Final Weighted Average Programs grade
-- -------- ------- ----- ---------------- --------------
2222 . . .
8989 . . .
9090 . . .
Class Average: ...

可以使用java.nio以字符串列表的形式获取文件的内容,这样就可以逐个过滤行。List类有一个toArray(T[]a)方法,您可以使用该方法将其转换为字符串数组。然后,您可以过滤这些行,以确定将使用哪一行以及如何打印。例如:

package Testers;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

public class TestClassResults{

    public static int testone = 30; //Percentages. Marked as integers. These can also be changed
    public static int testtwo = 30;
    public static int testthree = 40;
    public static List<Float> average;
    public static int students;

    public static String[] getAsArray(List<String>ls ){
        return ls.toArray(new String[]{});
    }

    public static void main(String[] args){
    File file = new File("C:\\Users\\Jose\\Documents\\Loops\\courseData.txt");
    Path path = Paths.get(file.toURI());
    try {
        List<String> ls = Files.readAllLines(path);
        String[] array = getAsArray(ls);
        parseClassRecord(array[1]);
        parseStudentRecord(array[2]);
        parseStudentRecord(array[3]);
        parseClassAverage();
        //You can keep parsing class and student records to match whatever you need to do
    } catch (IOException e) {
        e.printStackTrace();
    }
    }
    public static void parseClassRecord(String classno){
        System.out.println("Grade Data for Class " + classno);
        System.out.println("ID Programs Midterm Final Weighted Average Programs grade");
        System.out.println("-- -------- ------- ----- ---------------- --------------");
    }

    public static void parseStudentRecord(String studentfacts){
        System.out.print(studentfacts + " ");
        String first = studentfacts.substring(6, 7);
        String second = studentfacts.substring(9, 10);
        String third = studentfacts.substring(12, 13);
        int one = Integer.parseInt(first);
        int two = Integer.parseInt(second);
        int three = Integer.parseInt(third);
        float a = one/testone;
        float b = two/testtwo;
        float c = three/testthree;
        float percent = (a + b + c) /3;
        System.out.print(percent + " ");
        if(percent > 0.5){ //If the student scored more than 50% in a test
            System.out.print("Pass");
        }else{ // If they didn't
            System.out.print("Fail");
        }
        System.out.println();
        average.add(Float.valueOf(percent));
        students = students + 1; // Also can use students++ (it does the same thing).
    }

    public static void parseClassAverage(){
        float total = 0;
        for(int i = 0; i < average.size(); i++){
            total = total + average.get(i);
        }
        float avg = total / students;
        System.out.println("Class Average: " + avg);
        System.out.println(); // Creates a space between the lines.
    }

}
包装测试仪;
导入java.io.File;
导入java.io.IOException;
导入java.nio.file.Files;
导入java.nio.file.Path;
导入java.nio.file.path;
导入java.util.List;
公共类TestClassResults{
public static int testone=30;//百分比。标记为整数。这些也可以更改
公共静态int testtwo=30;
公共静态int testthree=40;
公共静态列表平均值;
公立学校学生;
公共静态字符串[]getAsArray(列表){
返回ls.toArray(新字符串[]{});
}
公共静态void main(字符串[]args){
File File=新文件(“C:\\Users\\Jose\\Documents\\Loops\\courseData.txt”);
Path Path=Path.get(file.toURI());
试一试{
列表ls=Files.readAllLines(路径);
字符串[]数组=getAsArray(ls);
parseClassRecord(数组[1]);
parseStudentRecord(阵列[2]);
parseStudentRecord(阵列[3]);
parseClassAverage();
//您可以不断解析类和学生记录,以匹配您需要执行的任何操作
}捕获(IOE异常){
e、 printStackTrace();
}
}
公共静态无效parseClassRecord(字符串classno){
System.out.println(“类别的等级数据”+类别编号);
System.out.println(“ID计划中期最终加权平均计划等级”);
System.out.println(“------------------------------------------------”;
}
公共静态无效parseStudentRecord(字符串studentfacts){
系统输出打印(studentfacts+“”);
String first=studentfacts.substring(6,7);
字符串秒=studentfacts.substring(9,10);
stringthird=studentfacts.substring(12,13);
int one=Integer.parseInt(第一个);
inttwo=整数.parseInt(秒);
int-three=Integer.parseInt(第三个);
浮点数a=1/testone;
浮点数b=2/test2;
浮点数c=三个/测试三个;
浮动百分比=(a+b+c)/3;
系统输出打印(百分比+“”);
如果(百分比>0.5){//如果学生在测试中得分超过50%
系统输出打印(“通过”);
}否则{//如果他们没有
系统输出打印(“失败”);
}
System.out.println();
平均值。加(浮动值)(百分比));
students=students+1;//也可以使用students++(它做同样的事情)。
}
公共静态void parseClassAverage(){
浮动总数=0;
对于(int i=0;i
您会注意到,我的方法没有使用BufferedReader,因为我发现它对于读取一行非常简单,但是对于多行文件,我发现将它们作为列表更容易,因为列表和集合API有特殊的方法