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

р существует только внутри цикла While (прочитать о размахе и локальных переменных, если вы не понимаете, почему). Чтобы получить доступ к нему outisde loop, вам нужно использовать arraylist (например, listOfPersons.get (0) вернет первого человека, которого вы добавили в список) => вы можете прочитать о том, как использовать коллекции. – assylias

+0

спасибо за ваш совет. Я новичок в java, и я все еще учился. Ты действительно помог мне – Laura

0

Вы используете отдельные экземпляры Person и Hobby добавить в соответствующие списки. Вместо этого для каждого найденного (уникального?) Идентификатора создайте new Person, new Hobby и используйте их для добавления в список.

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

Аналогичным образом для Хобби.

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

Если вы этого не сделаете, вы только добавляя последние найденные данные в одних и тех же person и hobby объектов к спискам.

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

Смежные вопросы