2016-06-03 3 views
0

У меня есть код, который считывает блок id из трех строк из текстового файла, я хочу разбить эти строки в Строках и int и передать это конструктор из другого класса. Прямо сейчас этот класс запрашивает идентификационный номер и печатает все ниже знака #, вплоть до третьей строки каждого блока id. Я хочу, чтобы эти три строки в каждом идентификаторе анализировались как «имя», «возраст» и «работа» для класса Employee, чтобы создать объект id, например: Employee («Richard Smith», 22, «Инженер-электрик»). В файле всегда будет три строки для id, так как я могу «найти» эти строки и разделить их на строки и int?Как читать из файла и отправлять его конструктору в Java

#1000 
Richard Smith 
22 
Electric engineer 

#1001 
Elliot Smith 
23 
Physicist 



public class RdB 
{ 
    String b; //file name 

    RdB(String ename) { 
     b = ename; 
    } 

    //info about an employee 
    boolean showE (String id) { 
     int ch; 
     String code, info; 

     //open the file with the info 
     try (BufferedReader showERdr = 
      new BufferedReader (new FileReader(b))) 
     { 
      do { 
       //read characters until a '#' is found 
       ch = showERdr.read(); 

       //check 
       if(ch == '#') { 
        code = showERdr.readLine(); 
        if(id.compareTo(code) == 0) { //found employee 
         do { 
          info = showERdr.readLine(); 
          if(info != null) { 
           System.out.println(info); 
          } 
         } while(((info != null) && 
          (info.compareTo("") != 0))); 
         return true; 
        } 
       } 
      } while(ch != -1); 
     } 
     catch(IOException exc) { 
      System.out.println("File error!"); 
      return false; 
     } 
     return false; //employee not found 
    } 

    //Access a registered employee 
    String getE() { 
     String id = ""; 

     BufferedReader br = new BufferedReader(
       new InputStreamReader(System.in)); 

     System.out.println("Enter id number: "); 
     try{ 
      id = br.readLine(); 
     } 
     catch(IOException exc) { 
      System.out.println("Access error"); 
     } 
     return id; 
    } 
} 

Edit: класс Employee

class Employee { 
private String name, job; 
private int age; 

    public Employee (String name, int age, String job) { 
     this.name = name; 
     this.age = age; 
     this.job = job; 
    } 

    public String getName() { 
     return name; 
    } 

    public int getAge() { 
     return age; 
    } 

    public String getJob() { 
     return job; 
    } 

} 
+0

как о запуске, написав класс 'Employee' –

+0

@ScaryWombat«класса Employee { частного имя String, работу; частный возраст; \t общественный сотрудник (название строки, int age, строковое задание) { \t this.name = имя; \t this.age = age; \t this.job = job; } \t public String getName() { \t имя на назад; } \t \t public int getAge() { \t возраст возврата; } \t public String getJob() { \t возвращение работы; } \t } –

+0

лучше обновить вопрос, а не добавить это в качестве комментария я думает –

ответ

1

Вы можете просто использовать ArrayList, чтобы сохранить то, что вы читаете из файла и обрабатывать его позже. Поскольку вы уверены в возможностях вашего сохраненного файла, он всегда будет содержать 3 строки перед строкой, содержащей ID, вот рабочий код, который я написал, чтобы решить вашу проблему. Вы можете увидеть результат завернутого между ()
Вот код:

import java.io.*; 
import java.util.List; 
import java.util.ArrayList; 

public class Emp{ 

public static void main(String[] args) throws IOException{ 
    List data = new ArrayList<String>(); 
    BufferedReader reader = new BufferedReader(new FileReader("PeopleData.txt")); 
    String str; 
    while((str = reader.readLine()) != null){ 
//   System.out.println(str); 
     data.add(str); 
    } 
    for(int i= 0; i< data.size(); i ++){ 
       i++; 
       System.out.println("("); 
       System.out.println(data.get(i)); 
       String name = (String) data.get(i); 
       i++; 
       System.out.println(data.get(i)); 
       int age = Integer.valueOf((String) data.get(i)); 
       i++; 
       System.out.println(data.get(i)); 
       String job = (String) data.get(i); 
       i++; 
       System.out.println(")"); 
       //new Employee(name, age, job); 
      } 
} 
} 
+0

Где передать переменные в конструктор Employee? –

+0

Комментарий в конце @ Rafa_Asp1 –

+0

Но если я напишу Employee.getName(); ниже (за пределами for) я получаю «нестатический метод getName() не может ссылаться на статический контекст». –