2012-05-02 71 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

相關問題