Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我被困在一个我不能去的地方';找不到_Java - Fatal编程技术网

Java 我被困在一个我不能去的地方';找不到

Java 我被困在一个我不能去的地方';找不到,java,Java,我不明白为什么我不能读取文件。我总是使用Readline()方法BufferedReader得到null TestStudent类应该能够执行以下功能: 使用名为students.txt的文本文件中存储的学生数据,创建一个名为studentList的学生对象的ArrayList对象(创建此文件时,应首先存储多个学生的学生姓名和ID–每个学生一行) 允许用户向ArrayList添加用户请求的尽可能多的新学生对象,确保每个学生都有唯一的学生ID 当用户完成向列表中添加新学生后,程序将覆盖studen

我不明白为什么我不能读取文件。我总是使用Readline()方法BufferedReader得到null

TestStudent类应该能够执行以下功能:

使用名为students.txt的文本文件中存储的学生数据,创建一个名为studentList的学生对象的ArrayList对象(创建此文件时,应首先存储多个学生的学生姓名和ID–每个学生一行) 允许用户向ArrayList添加用户请求的尽可能多的新学生对象,确保每个学生都有唯一的学生ID 当用户完成向列表中添加新学生后,程序将覆盖students.txt文件,使其包括与新学生以及原始学生相关的数据 能够在必要时显示完整的学生列表以及现有的学生ID

这是我到现在为止所做的

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