Java 在while循环中有一个for循环专门从文件中读取?
我有一个包含多个团队的文本文件。所有团队都有不同的变量,但值不同。但在接近终点时,有些团队有2名团队成员,有些团队成员最多(8名) 我有这个while循环来读取整个行,并将值分配到对象的构造函数中。我想我应该使用for循环来分配团队成员,但是我应该在for条件中写些什么,以便为团队的对象分配Java 在while循环中有一个for循环专门从文件中读取?,java,file-io,Java,File Io,我有一个包含多个团队的文本文件。所有团队都有不同的变量,但值不同。但在接近终点时,有些团队有2名团队成员,有些团队成员最多(8名) 我有这个while循环来读取整个行,并将值分配到对象的构造函数中。我想我应该使用for循环来分配团队成员,但是我应该在for条件中写些什么,以便为团队的对象分配 try { while(input.hasNext()) { input.nextLine();
try {
while(input.hasNext())
{
input.nextLine();
int ID = input.nextInt();
String teamName = input.next();
String coachFirst = input.next();
String coachLast = input.next();
String mentorFirst = input.next();
String mentorLast = input.next();
String teamFs = input.next();
String teamSS = input.next();
//for loop?
input.nextLine();
}
}
catch (NoSuchElementException statException)
{
System.out.print("WRONG ELEMT");
}
catch (IllegalStateException stateException)
{
System.out.print("Wrong state");
}
文本文件,以防任何人需要理解我的问题:
TeamNumber,Team Name,Coach First,Coach Last,Mentor First,Mentor Last,Team Fin Sponsor,Schools or Sponsoring Organization,TmMem1First,TmMem1Last,TmMem2First,TmMem2Last,TmMem3First,TmMem3Last,TmMem4First,TmMem4Last,TmMem5First,TmMem5Last,TmMem6First,TmMem6Last,TmMem7First,TmMem7Last,TmMem8First,TmMem8Last
6842,Reagan Ray-Guns,Judy,Mallon,Aziz,Valdez,Texas Workforce Commission,REAGAN H S,Steven,Cepeda,Alan,Yue,Tim,Callaway,Damon,Bertucci,Samuel,de Olvieira,Samuel,Day,,,,
6888,Islanders,Judy,Maldonado,Brady,Trevino,Three Rivers Robotics,THREE RIVERS MIDDLE,Shireen,Cowdrey,Dee,Roundtree,Steven,Callaway,Francisco,Bermea,,,,,,,,
7004,GREENHILL Tops,Kanat,LaBass,Harvey,Pflueger,GREENHILL Boosters,GREENHILL SCHOOL,Harvey,Pflueger,Sandra,Day,Denny,Rodriguez,shirley,Couvillon,Carly,Szarka,,,,,,
7079,SportBots,Karim,Kramer,Brian,Torres Santos,,HARMONY SCHOOL OF NATURE & ATHLETICS,Steven,Castillo Baca,John,McGaughey,Warren,Aktas,Diane,Barrera,Rebeca,Escamilla,Bert,Eickstead,Jina,Castillejo,Eddy,Romeo
检查下面的代码。在while循环的每次迭代结束时,您将得到一个新的“newTeam”对象,您可以以任何方式操纵它。每个团队对象都包含一个用于保存团队成员对象的ArrayList。每个团队成员对象都有一个名字和一个姓氏 我本来可以扩展成员类来存储教练和导师的姓名,但我不想让您感到困惑。因此,我一直保持简单。你可以在此基础上再接再厉
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
public class TeamReader {
// Nested class for holding the properties of a team
static class Team{
// Nested class for holding first and last names of members
static class Member{
String firstName, lastName;
public Member(String fname, String lname){
this.firstName = fname;
this.lastName = lname;
}
}
int ID;
String teamName, coachFirst, coachLast, mentorFirst, mentorLast, sponsor, org;
ArrayList<Member> members = new ArrayList<Member>();
public String toString(){
return Integer.toString(ID)+" - "+teamName;
}
}
public static void main(String[] args) throws IOException {
//System.out.println(System.getProperty("user.dir")); Finding current working directory
File file = new File("input.csv");
BufferedReader br = new BufferedReader(new FileReader(file));
String current;
current = br.readLine(); // Skipping csv header
while((current = br.readLine())!=null){
System.out.println(current);
String[] data = current.split(",");
Team newTeam = new Team();
for (int i = 0; i < data.length; i++){
switch(i){
case 0:
newTeam.ID = Integer.parseInt(data[i]);
break;
case 1: newTeam.teamName = data[i];
break;
case 2: newTeam.coachFirst = data[i];
break;
case 3: newTeam.coachLast = data[i];
break;
case 4: newTeam.mentorFirst = data[i];
break;
case 5: newTeam.mentorLast = data[i];
break;
case 6: newTeam.sponsor = data[i];
break;
case 7: newTeam.org = data[i];
break;
default:newTeam.members.add(new Team.Member(data[i],data[i+1]));
i++;
break;
}
}
// Do whatever you want with the team
System.out.println(newTeam);
}
}
}
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.ArrayList;
公共类TeamReader{
//用于保存团队属性的嵌套类
静态班小组{
//用于保存成员的名字和姓氏的嵌套类
静态类成员{
字符串firstName,lastName;
公共成员(字符串fname、字符串lname){
this.firstName=fname;
this.lastName=lname;
}
}
int-ID;
字符串teamName、coachFirst、coachLast、mentorFirst、mentorLast、赞助商、组织;
ArrayList成员=新的ArrayList();
公共字符串toString(){
返回整数.toString(ID)+“-”+teamName;
}
}
公共静态void main(字符串[]args)引发IOException{
//System.out.println(System.getProperty(“user.dir”);查找当前工作目录
文件=新文件(“input.csv”);
BufferedReader br=新的BufferedReader(新文件读取器(文件));
串电流;
current=br.readLine();//跳过csv头
而((当前=br.readLine())!=null){
系统输出打印项次(当前);
String[]data=current.split(“,”);
团队新团队=新团队();
对于(int i=0;i
只需立即将整个文件读入列表
,然后浏览列表
,并实例化您的团队
public static void main(String[] args) {
try {
List<String> myFileLines = Files.readAllLines(Paths.get(yourTextFile));
List<Team> myTeams = new ArrayList<>();
for (String line : myFileLines) {
String[] linePieces = line.split(",");
Team team = new Team();
team.TeamNumber = linePieces[0];
team.TeamName = linePieces[1];
team.CoachFirst = linePieces[2];
// etc...
myTeams.add(team);
}
// Do whatever with your list of teams
} catch (Exception e) {
// Handle exception
}
}
public static class Team {
String TeamNumber,TeamName,CoachFirst,CoachLast,MentorFirst,
MentorLast,TeamFinSponsor,SchoolsorSponsoringOrganization,
TmMem1First,TmMem1Last,TmMem2First,TmMem2Last,TmMem3First,
TmMem3Last,TmMem4First,TmMem4Last,TmMem5First,TmMem5Last,
TmMem6First,TmMem6Last,TmMem7First,TmMem7Last,TmMem8First,TmMem8Last;
}
publicstaticvoidmain(字符串[]args){
试一试{
列出myFileLines=Files.readAllLines(path.get(yourTextFile));
List myTeams=new ArrayList();
for(字符串行:myFileLines){
String[]linePieces=line.split(“,”);
团队=新团队();
team.TeamNumber=线条[0];
team.TeamName=线条[1];
team.CoachFirst=线条[2];
//等等。。。
添加(团队);
}
//对你的团队列表做任何事情
}捕获(例外e){
//处理异常
}
}
公共静态课堂小组{
字符串TeamNumber、TeamName、CoachFirst、CoachLast、导师优先、,
导师、团队资助、学校或资助组织,
TmMem1First、TmMem1Last、TmMem2First、TmMem2Last、TmMem3First、,
TmMem3Last、TmMem4First、TmMem4Last、TmMem5First、TmMem5Last、,
TmMem6First、TmMem6Last、TmMem7First、TmMem7Last、TmMem8First、TmMem8Last;
}
我建议逐行读取文件,每行使用新的扫描仪。这样,当扫描器没有下一个元素时,您就知道已经到了行的末尾。但是,如果我将txt文件替换为另一个具有相同元素类型但具有不同值@jbnizet的文件,则代码将读取新文本文件中的值。也就是说。我只是注意到每行中的条目数总是相同的。只是最后一行是空字符串。所以jsut测试它们是否为空。或者更好,使用CSV库读取文件,因为它是CSV文件。请用代码演示一下好吗@JBNizet