2012-05-02 38 views
2

我已经完成了文件的读写,但是我遇到了问题。我不知道它为什么只显示文件的最后一行。在从Person.txt中读取行的部分中,当我离开while循环时,我想为每行显示p.getName(),并仅显示最后一行。我怎样才能解决这个问题?从2个txt文件中添加一些元素到第三个文件中

这里是我的代码:

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

您不断添加同一个人到列表中。您需要通过取消注释注释行来在每次迭代中创建一个新对象。一旦你完成了,你可以删除类成员(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); 
    } 
    } 
+0

,但是当我读p.getNume()的,而外面显示什么 – Laura

+0

p只能while循环中存在(阅读范围和局部变量,如果你不明白为什么)。要访问循环,需要使用arraylist(例如listOfPersons.get(0)将返回已添加到列表中的第一个人)=>您可以阅读如何使用集合。 – assylias

+0

谢谢你的建议。我是新来的java,我还在学习。你真的帮我 – Laura

0

您正在使用的PersonHobby的单个实例添加到相应的列表。相反,对于找到的每个(唯一的?)ID,请创建new Personnew Hobby并使用它们添加到列表中。

p = new Person(); 
p.setXXX... 
... 

类似的业余爱好。

h = new Hobby(); 
h.setXXX... 
... 

除非你这样做,你只能是加入了最新的发现数据相同personhobby对象名单。

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); 
    } 
    } 
} 
+0

感谢您的帮助。 – Laura

相关问题