Java 我被困在一个我不能去的地方';找不到
我不明白为什么我不能读取文件。我总是使用Readline()方法BufferedReader得到null TestStudent类应该能够执行以下功能: 使用名为students.txt的文本文件中存储的学生数据,创建一个名为studentList的学生对象的ArrayList对象(创建此文件时,应首先存储多个学生的学生姓名和ID–每个学生一行) 允许用户向ArrayList添加用户请求的尽可能多的新学生对象,确保每个学生都有唯一的学生ID 当用户完成向列表中添加新学生后,程序将覆盖students.txt文件,使其包括与新学生以及原始学生相关的数据 能够在必要时显示完整的学生列表以及现有的学生ID 这是我到现在为止所做的Java 我被困在一个我不能去的地方';找不到,java,Java,我不明白为什么我不能读取文件。我总是使用Readline()方法BufferedReader得到null TestStudent类应该能够执行以下功能: 使用名为students.txt的文本文件中存储的学生数据,创建一个名为studentList的学生对象的ArrayList对象(创建此文件时,应首先存储多个学生的学生姓名和ID–每个学生一行) 允许用户向ArrayList添加用户请求的尽可能多的新学生对象,确保每个学生都有唯一的学生ID 当用户完成向列表中添加新学生后,程序将覆盖studen
import java.util.*;
导入java.io.*;
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.util.Scanner;
导入java.util.ArrayList;
公共课测试学生{
公共静态void main(字符串[]args)引发IOException{
文件f=新文件(“C:\\Users\\user1\\Desktop\\Students.txt”);
BufferedWriter bw=新的BufferedWriter(新的文件写入程序(f));
//FileReader以默认编码读取文本文件。
文件读取器文件读取器=
新文件阅读器(f);
//始终将文件读取器包装在BufferedReader中。
BufferedReader BufferedReader=
新的BufferedReader(文件阅读器);
//文件f=新文件(“Student.txt”);
扫描仪sc=新的扫描仪(System.in);
扫描仪扫描=新扫描仪(f);
ArrayList studentList=新建ArrayList();
字符串cont;
做{
System.out.println(“输入学生姓名:”);
字符串名称=sc.next();
System.out.println(“输入学生ID:”);
字符串id=sc.next();
写(姓名);
写入(“\t”+id);
换行符();
System.out.println(“是否继续添加?”);
cont=sc.next();
}
而(续"相等信号个案");;
while(bufferedReader.readLine()!=null){
String line=bufferedReader.readLine();
字符串[]记录=行。拆分(“\t”);
学生myStudent=新学生(记录[0],记录[1]);
添加(myStudent);
}
学生名单(学生名单)
System.out.println(st.Name+“”+st.Id);
bw.close();
scan.close();
sc.close();
}
}
班级学生{
字符串名称、Id;
默认值为红色
学生(字符串,字符串0){
System.out.println(“s”);
}
//以下是变异方法
公共字符串getName(){
返回此.Name;
}
公共字符串getId(){
返回此.Id;
}
//以下是访问器方法
公共void集合名(字符串s){
this.Name=s;
}
公共无效集合ID(字符串ID){
这个.Id=Id;
}
公共字符串toString(){
return“Student name is”+getName()+“Student Id is”+getId();
}
公共布尔值isvalidd(){
如果(getId().length()!=6)
返回false;
否则{
对于(int i=0;i'9'| Id.charAt(i)您忘记为构造函数中的新对象分配studentID和studentName
Student(String string, String string0) {
System.out.println("s");
id = string;
name = string0;
}
由于您写入和读取同一个文件,因此在读取之前必须关闭fileWriter
do {
// your code
}
while(cont.equalsIgnoreCase("y"));
// close buffer writer before reading
bw.close()
String line;
while((line = bufferedReader.readLine()) != null){
String[] record = line.split("\t");
Student myStudent =new Student(record[0],record[1]);
studentList.add(myStudent);
}
问题在于:
while(bufferedReader.readLine() != null){
String line = bufferedReader.readLine();
...
}
对readLine()
的第一次调用读取该行,但不分配它-它已丢失。对readLine()
的下一次调用读取下一行
应该是:
String line = null;
while ((line = bufferedReader.readLine()) != null){
....
}
这将读取下一行,将其分配到行
,然后与空
进行比较
然后,您的学生构造函数被破坏:
Student(String string, String string0) {
System.out.println("s");
}
您从未将string
和string0
分配给任何对象,并且Id
和Name
未分配且始终null
此外,您的代码无法编译:
String Name, Id;
with default value red
这是一个语法错误
阅读了解以确保代码正常工作,并确保您的问题一次只针对一个问题。只需确保单独测试程序的每个部分并确保其实际编译,就可以解决大部分问题。打开文件进行编写会截断其内容。此代码有很多问题,不是吗你不可能把它们全部列出。你需要一次编写一小段代码。在继续下一段之前,确保这段代码有效。当你问问题时,请举个例子。
String Name, Id;
with default value red