将2个文本文件中的一些元素添加到第三个文件中

时间:2012-05-02 15:39:17

标签: java file

我已经完成了文件的读写,但我遇到了问题。我不知道为什么它只显示文件的最后一行。在读取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);
    }
  }
}

3 个答案:

答案 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)

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

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

同样适合爱好。

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

除非您这样做,否则您只需将最新找到的数据添加到列表中的相同personhobby个对象。

答案 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);
    }
  }
}