Java从文本文件中读取
我正在尝试使用扫描仪将一些数据从文本文件加载到GUI。我的文本文件中有两个部分:俱乐部和会员。代码在俱乐部部分正常运行。例如,如果我的列表中有4个俱乐部,则所有俱乐部都将显示,但对于“会员”部分,无论列表中有多少会员,都只显示第一个会员。这是我的密码:Java从文本文件中读取,java,user-interface,import,Java,User Interface,Import,我正在尝试使用扫描仪将一些数据从文本文件加载到GUI。我的文本文件中有两个部分:俱乐部和会员。代码在俱乐部部分正常运行。例如,如果我的列表中有4个俱乐部,则所有俱乐部都将显示,但对于“会员”部分,无论列表中有多少会员,都只显示第一个会员。这是我的密码: public void load (String fileName) throws FileNotFoundException { FileInputStream fileIn = new FileInputStream("Clubs.
public void load (String fileName) throws FileNotFoundException {
FileInputStream fileIn = new FileInputStream("Clubs.txt");
Scanner scan = new Scanner(fileIn);
while (scan.hasNextLine()){
String line = scan.nextLine();
if(line.equals("Members")){
String firstName = scan.next();
String lastName = scan.next();
Pupil p1 = new Pupil( firstName, lastName);
pupils[nbrPupils] = p1;
nbrPupils ++;
}
else if(line.equals("Clubs")){
while (scan.hasNext()){
String club = scan.nextLine();
Club aNewClub = new Club(club);
clubs[nbrClubs] = aNewClub;
nbrClubs ++;
}
}
提示:您在
Clubs
部分执行while(scan.hasNext())
,但在Members
部分不执行此操作。将while
循环转换为if
条件,因为您只想检查是否存在下一行
else if (line.equals("Clubs")) {
if (scan.hasNext()) {/////here if you use while loop , it will loop until the file is finish
String club = scan.nextLine();
}
当您执行
scan.nextLine()
操作时,它会将扫描仪移动到当前读入的扫描仪后面的行。因此,如果继续执行scan.next()
,扫描仪将从当前行的末尾开始(在本例中为行
)并读取后面的内容
它说:
“将此扫描仪前进到当前行之后,返回被跳过的输入”
您只需调用line
上的split()
或substring()
,并提取所需信息即可
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ReadFile {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
new ReadFile().load("");
}
public void load (String fileName) throws FileNotFoundException {
FileInputStream fileIn = new FileInputStream("C:\\Clubs.txt");
Scanner scan = new Scanner(fileIn);
boolean membersfound =false;
while (scan.hasNextLine()){
String line = scan.nextLine();
if(line.equals("Members") || membersfound){
String firstName = scan.next();
String lastName = scan.next();
System.out.println("Member "+firstName +":"+ lastName);
}
else if(line.equals("Clubs") ){
while (scan.hasNext()){
String club = scan.nextLine();
if( club.equals("Members")){
membersfound = true;
break;
}
System.out.println("Clubname :" + club
);
}
}
}
}
}
我本来可以修改整个程序的。但我想告诉你你的错误
示例clubs.txt文件
成员
成员1
成员2
成员3
俱乐部
俱乐部1
俱乐部2
club3你能给我一个在文本文件中输入的例子吗?欢迎来到SO!我对你的帖子做了一些小的修改,使你的要求对社区更为明显。谢谢你的提示。但是如果我在Members部分使用while循环,程序也不会运行,我不知道为什么…这就是我得到的答案,你说的“不运行”是什么意思?请记住,
while(scan.hasNext())
在文件完成之前永远不会退出循环。考虑添加条件<代码>!line.equals(“Clubs”)到while循环。感谢您的帮助。我试着按照你的建议修改代码,但是没有用。我又是stack:)split和substring与这里提出的问题无关。@m0skit0我的回答是“Members”部分不起作用,因为他的代码将扫描仪移得太远了。为了避免这种情况,我建议使用split和substring。什么时候他们与这个问题无关?