Как прочитать текстовый файл в массив с закрытыми полями с помощью мутаторов в Java

Я гуглил это пару дней без особой удачи. Я пытаюсь прочитать текстовый файл и использовать эту информацию для заполнения частных полей массива для объекта класса. Я новичок в Java и довольно новичок в программировании в целом.

То, что я придумал для чтения массива, кажется очень неуклюжим, и я чувствую, что должен быть лучший способ, но я не могу найти хороший пример для этого конкретного случая.

Создание набора строковых переменных было единственным способом заставить это работать. Возможно, main — плохое место для этого; возможно, Сканер здесь плохой выбор?

Какие есть лучшие способы реализовать эту ситуацию?

Мой текстовый файл, содержащий строки и целые числа, разделенные пробелами в строках, похож на этот:

Джо 2541 555-1212 345 1542 Тип

Боб 8543 555-4488 554 1982 Тип ... и т.д.

Вот моя большая часть моего кода до сих пор, который находится в основном:

   Scanner in = new Scanner(new FileReader("accounts.txt")); //filename to import
   Accounts [] account = new Accounts [10];
   int i = 0; 
   while(in.hasNext())
   {          
    account[i] = new Accounts();
    String name = in.next();
    String acct_num = in.next();
    String ph_num = in.next();
    String ss_num = in.next();
    int open_bal = in.nextInt();
    String type = in.next();

    account[i].setName(name);
    account[i].setAcctNum(acct_num);
    account[i].setPhoneNum(ph_num);
    account[i].setSSNum(ss_num);
    account[i].setOpenBal(open_bal);
    account[i].setType(type);
    i++;
   }

class Accounts
{
  public Accounts()
  { 
  }

  public Accounts(String n, String a_num, String ph_num, 
  String s_num, int open_bal, String a_type, double close_bal)
  {
  name = n;
  account_number = a_num;
  phone_number = ph_num;
  ssn = s_num;
  open_balance = open_bal;
  type = a_type;
  close_balance = close_bal;
  }
  public String getName()
  {
    return name;
  } 
  public void setName(String field)
  {
    name = field;
  }
  public String getAcctNum()
  {
    return account_number;
  }
  public void setAcctNum(String field)
  {
    account_number = field;
  }
  //And so forth for the rest of the mutators and accessors

  //Private fields             
  private String name;
  private String account_number;
  private String phone_number;
  private String ssn;
  private int open_balance;
  private String type;
  private double close_balance;
} 

person jhovanec    schedule 16.02.2014    source источник


Ответы (2)


Я считаю, что вам нужно разделить каждую строку, чтобы получить данные, содержащиеся в каждой строке. Вы можете использовать функцию split() класса строки, которая вернет строку []. Затем вы можете просмотреть каждый индекс массива строк и передать их методам мутатора класса учетной записи.

Что-то вроде этого, может быть.

while(in.hasNext())
{
    // will take each line in the file and split at the spaces.
    String line = in.next();
    String[] temp = line.split(" ");

    account[i].setName(temp[0]);
    account[i].setAcctNum(temp[1]);
    account[i].setPhoneNum(temp[2] + "-" + temp[3]);
    account[i].setSSNum(temp[4]);
    account[i].setOpenBal((int)temp[5]);
    account[i].setType(temp[6]);

    // will account for blank line between accounts.
    in.next();
    i++;
 }

Номер телефона разбивается на два отдельных индекса, поэтому вам нужно воссоединиться с номером телефона, учитывая, что первые 3 цифры находятся в одном индексе, а последние 4 - в следующем.

person Jason White    schedule 16.02.2014

person wypieprz    schedule 16.02.2014