如何打开文件?

问题描述 投票:0回答:1

例如:如果程序的输入是:

学生信息.tsv StudentInfo.tsv 的内容是:

巴雷特·伊丹 70 45 59 布拉德肖·里根 96 97 88 查尔顿·凯厄斯 73 94 80 梅奥·泰瑞斯 88 61 36 斯特恩布伦达 90 86 45 文件report.txt应包含:

巴雷特·伊丹 70 45 59 F 布拉德肖·里根 96 97 88 A 查尔顿·凯厄斯 73 94 80 B 梅奥·泰瑞斯 88 61 36 D 斯特恩布伦达 90 86 45 C

平均分:期中1 83.40,期中2 76.60,期末61.60 (忽略所有其余的代码,我只是想了解为什么我无法读取该文件)

import java.util.Scanner;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;


public class LabProgram {
   public static void main(String[] args) throws IOException {
      Scanner scnr = new Scanner(System.in);
      BufferedReader reader;

      /* TODO: Declare any necessary variables here. */
        String input = scnr.nextLine();
        System.out.print(input);
        try {
            Scanner scanner = new Scanner(new File(input));

            while (scanner.hasNextLine()) {
                System.out.println(scanner.nextLine());
            }

            scanner.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
      
      /* TODO: Read a file name from the user and read the tsv file here. */
    
      
      /* TODO: Compute student grades and exam averages, then output results to a text file here. */
 /*     average = (midterm1 +midterm2 +finalg)/3

    if (average >= 90){
        grade == "A"};
    else if ((80 <= average) && (average < 90)){
        grade == "B"};
    else if ((70 <= average) && (average < 80)){
        grade == "c"};
    else if ((60 <= average) && (average < 70)){
        student_grade == "D"};
    else (average < 60){
        grade == "F"};        */
   }
}

每当我运行该程序时,它都没有输出。 我尝试了几种不同的文件读取方法,但并不完全理解它们。 如果输入是 StudentInfo.tsv 不应该保存在

String input = scnr.nextLine();

? 然后我就可以传递输入了?

java csv file-io inputstream
1个回答
0
投票

这是一个例子。

Scanner scnr = new Scanner(System.in);

/* TODO: Declare any necessary variables here. */
class Entry {
    String last, first;
    int midterm1, midterm2, finalg;

    String grade() {
        int x = (int) Math.floor(average());
        if (x >= 97 && x <= 100) return "A+";
        else if (x >= 93 && x <= 96) return "A";
        else if (x >= 90 && x <= 92) return "A−";
        else if (x >= 87 && x <= 89) return "B+";
        else if (x >= 83 && x <= 86) return "B";
        else if (x >= 80 && x <= 82) return "B−";
        else if (x >= 77 && x <= 79) return "C+";
        else if (x >= 73 && x <= 76) return "C";
        else if (x >= 70 && x <= 72) return "C−";
        else if (x >= 67 && x <= 69) return "D+";
        else if (x >= 63 && x <= 66) return "D";
        else if (x >= 60 && x <= 62) return "D−";
        else return "F";
    }

    double average() {
        return (midterm1 +midterm2 +finalg)/3.;
    }

    static Entry parse(String s) {
        Entry e = new Entry();
        String[] a = s.split("\t", -1);
        e.last = a[0];
        e.first = a[1];
        e.midterm1 = Integer.parseInt(a[2]);
        e.midterm2 = Integer.parseInt(a[3]);
        e.finalg = Integer.parseInt(a[4]);
        return e;
    }

    @Override
    public String toString() {
        return
              "%s\t%s\t".formatted(last, first)
            + "%s\t%s\t%s\t".formatted(midterm1, midterm2, finalg)
            + grade();
    }
}
List<Entry> l = new ArrayList<>();


/* TODO: Read a file name from the user and read the tsv file here. */
try (BufferedReader r = new BufferedReader(new FileReader(scnr.nextLine()))) {
    r.lines().forEach(x -> l.add(Entry.parse(x)));
}


/* TODO: Compute student grades and exam averages, then output results to a text file here. */
try (PrintWriter w = new PrintWriter(new FileWriter("report.txt"))) {
    l.forEach(w::println);
}

而且,这是 report.txt

Barrett Edan    70  45  59  F
Bradshaw    Reagan  96  97  88  A
Charlton    Caius   73  94  80  B−
Mayo    Tyrese  88  61  36  D−
Stern   Brenda  90  86  45  C
© www.soinside.com 2019 - 2024. All rights reserved.