这是我编写的代码。当我使用Scanner
时,它工作得很好,但与BufferedReader
不能正常工作。
这就是问题
根据以下规范开发和测试程序。
- 考虑一个具有实例字段名称、注册号和CGPA的类Student
- 通过键盘将20名这样的学生的信息输入到Excel文件中
- 按照注册号的顺序对文件的记录进行排序
- 将文件的内容分成两半,并将每一半写入Excel文件
代码:
package com.hitesh;
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class Student {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("DA3.xls");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String name;
String registrationNo;
float gpa;
int n = 0;
Scanner scanner = new Scanner(System.in);
fw.write("Student Name" + 't' + "Registration No" + 't' + "GPA" + 'n');
while (n < 3)
{
System.out.print("Enter Student Name: ");
name = br.readLine();
// name = scanner.next();
System.out.print("Enter registration number: ");
registrationNo = br.readLine();
// registrationNo = scanner.next();
System.out.print("Enter GPA: ");
gpa = br.read();
// gpa = scanner.nextFloat();
fw.write(name + 't' + registrationNo + 't' + gpa + 'n');
n++;
}
fw.close();
}
}
输出屏幕截图
在我更改了您的代码行之后,您的代码对我来说很好——Windows 10上的JDK 11:
gpa = br.read();
到此:
gpa = br.readLine();
根据方法读取的javadoc,在类java.io.BufferedReader
:中
读取单个字符。
Windows中的换行符实际上是两个字符,因此您实际上只是在while
循环的最后部分读取一个字符,而忽略换行符,这些换行符会在while
循环的下一次迭代开始时混淆第一个readLine
调用。
这是完整的代码。
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
public class Student {
public static void main(String[] args) throws IOException {
try (FileWriter fw = new FileWriter("DA3.xls");
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr)) {
fw.write("Student Name" + 't' + "Registration No" + 't' + "GPA" + 'n');
int n = 0;
while (n < 3) {
System.out.print("Enter student name: ");
String name = br.readLine();
System.out.print("Enter registration number: ");
String registrationNo = br.readLine();
System.out.print("Enter GPA: ");
String gpa = br.readLine();
fw.write(name + "t" + registrationNo + "t" + gpa + "n");
n++;
}
}
}
}
Excel正确地显示了文件——之后它向我显示了一个对话框窗口,其中显示了一条文件格式不合适的消息,并询问我是否仍要打开该文件。我说是的,那么写入Java程序中的文件的数据就会正确显示。当然,Excel猜测如何显示数据,这意味着它没有正确显示GPA。为了从Java创建一个格式正确的Excel文件,您需要使用像ApachePOI这样的库。
我会按照您的计划Scanner
:
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("DA3.csv");
final String FMT = "%st%st%s%n";
String name;
String registrationNo;
float gpa;
int n = 0;
Scanner scanner = new Scanner(System.in);
scanner.useDelimiter("\R");
fw.write(String.format(FMT, "Student Name", "Registration No", "GPA"));
while (n < 3) {
System.out.print("Enter Student Name: ");
name = scanner.next();
System.out.print("Enter registration number: ");
registrationNo = scanner.next();
System.out.print("Enter GPA: ");
gpa = scanner.nextFloat();
fw.write(String.format(FMT, name, registrationNo, gpa));
n++;
}
fw.close();
}