我已经完成了文件的读写,但我遇到了问题。我不知道为什么它只显示文件的最后一行。在读取Person.txt中的行的部分中,当我离开while循环时,我想显示每行的p.getName(),它只显示最后一行。我该如何解决这个问题?
这是我的代码:
import java.io.*;
import java.util.*;
import java.util.ArrayList;
public class ListaHobby {
String line="";
Hobby h = new Hobby();
Persoana p = new Persoana();
BufferedWriter bw = null;
ArrayList<Persoana> listOfPersons;
ArrayList<Hobby> listOfHobbies;
public void writeListaHobbies(){
try{
listOfPersons = new ArrayList<Persoana>();
FileReader file1 =new FileReader("Persoane.txt");
listOfHobbies = new ArrayList<Hobby>();
FileReader file2 = new FileReader("Hobby.txt");
BufferedReader br1 = new BufferedReader(file1);
BufferedReader br2 = new BufferedReader(file2);
while((line1 = br1.readLine()) != null){
if(!line1.trim().contains("ID")){
String[] attributes = line1.split(";");// split it at every ";"
//Person person = new Person(); // make a new person
p.setNume(attributes[1]);
p.setPrenume(attributes[2]);
p.setDataNasterii(attributes[3]);
p.setProfesie(attributes[4]);
listOfPersons.add(p);
}
}
System.out.println(p.getNume());
while((line2 = br2.readLine()) != null){
if(!line2.trim().contains("ID")){
String[] attributes = line2.split(";"); // split it at every ";"
// make a new person
h.setNume(attributes[1]);
h.setDescriere(attributes[2]);
h.setNrPers(attributes[3]);
h.setElemNecesar(attributes[4]);
listOfHobbies.add(h);
}
}
System.out.println(h.getNume());
FileWriter fw = new FileWriter("PersHobby.txt");
bw = new BufferedWriter(fw);
for(int i = 0;i < listOfPersons.size(); i++) {
//for(int j = 0 ; j < listOfHobbies.size();j++) {
if((p.getId())== (h.getId()))
p.addHobby(h);
String s = p.getNume() + " " +p.getPrenume() +
": " + h.getNume() + ", " + h.getNume();
System.out.println(s);
bw.write(s);
bw.newLine();
}
bw.close();
}
catch(IOException ex){
System.out.println("Error opening file.");
System.exit(1);
}
}
}
答案 0 :(得分:0)
您继续将同一个人添加到您的列表中。您需要在每次迭代时通过取消注释注释行来创建新对象。完成后,您可以删除不再需要的类成员(p),因为您将人员存储在ArrayList中。
相同的评论适用于爱好列表。
while((line1 = br1.readLine()) != null){
if(!line1.trim().contains("ID")){
String[] attributes = line1.split(";");// split it at every ";"
Persoana p = new Persoana(); // <~~~ you need to create a new person for each line
p.setNume(attributes[1]);
p.setPrenume(attributes[2]);
p.setDataNasterii(attributes[3]);
p.setProfesie(attributes[4]);
listOfPersons.add(p);
}
}
答案 1 :(得分:0)
您正在使用Person
和Hobby
的单个实例添加到相应的列表中。相反,对于找到的每个(唯一?)ID,请创建new Person
,new Hobby
并使用它们添加到列表中。
p = new Person();
p.setXXX...
...
同样适合爱好。
h = new Hobby();
h.setXXX...
...
除非您这样做,否则您只需将最新找到的数据添加到列表中的相同person
和hobby
个对象。
答案 2 :(得分:0)
在阅读输入文件的每一行时,您需要添加人员和爱好,并在写入文件时迭代人员和爱好。
import java.io.*;
import java.util.*;
import java.util.ArrayList;
public class ListaHobby {
String line="";
Hobby h;
Persoana p;
BufferedWriter bw = null;
ArrayList<Persoana> listOfPersons;
ArrayList<Hobby> listOfHobbies;
public void writeListaHobbies(){
try{
listOfPersons = new ArrayList<Persoana>();
FileReader file1 =new FileReader("Persoane.txt");
listOfHobbies = new ArrayList<Hobby>();
FileReader file2 = new FileReader("Hobby.txt");
BufferedReader br1 = new BufferedReader(file1);
BufferedReader br2 = new BufferedReader(file2);
while((line1 = br1.readLine()) != null){
if(!line1.trim().contains("ID")){
String[] attributes = line1.split(";");// split it at every ";"
p = new Persoana(); // make a new person
p.setNume(attributes[1]);
p.setPrenume(attributes[2]);
p.setDataNasterii(attributes[3]);
p.setProfesie(attributes[4]);
listOfPersons.add(p);
}
}
System.out.println(p.getNume());
while((line2 = br2.readLine()) != null){
if(!line2.trim().contains("ID")){
String[] attributes = line2.split(";"); // split it at every ";"
h=new Hobby();
h.setNume(attributes[1]);
h.setDescriere(attributes[2]);
h.setNrPers(attributes[3]);
h.setElemNecesar(attributes[4]);
listOfHobbies.add(h);
}
}
System.out.println(h.getNume());
FileWriter fw = new FileWriter("PersHobby.txt");
bw = new BufferedWriter(fw);
for(int i = 0;i < listOfPersons.size(); i++) {
p=listOfPersons.get(i);
for(int j = 0 ; j < listOfHobbies.size();j++) {
h=listOfHobbies.get(j);
if(p.getId())== h.getId()))
p.addHobby(h);
String s = p.getNume() + " " +p.getPrenume() +
": " + h.getNume() + ", " + h.getNume();
System.out.println(s);
bw.write(s);
bw.newLine();
}
}
bw.close();
}
catch(IOException ex){
System.out.println("Error opening file.");
System.exit(1);
}
}
}