2013-02-22 5 views
0

Я создал приложение, которое позволяет пользователю вводить номер своей учетной записи, баланс (не более 99999) и фамилию. Программа примет эту информацию и вставляет ее в файл .txt в месте, соответствующем номеру учетной записи (acct). Вот код, который:Отображение информации в файле произвольного доступа

import java.io.*; 

public class NationalBank { 
    public static void main(String[] args) throws Exception{ 
    InputStreamReader temp = null; 
    BufferedReader input = null; 
    try { 
     temp = new InputStreamReader(System.in); 
     input = new BufferedReader(temp); 

     int acct; 
     double amount; 
     String name; 
     RandomAccessFile file = new RandomAccessFile("bank.txt", "rw"); 
     while(true) { 
      // Asks for input 
      System.out.println("Enter Account Number (0-9999): "); 
      acct = Integer.parseInt(input.readLine()); 
      System.out.println("Enter Last Name: "); 
      name = input.readLine(); 
      System.out.println("Enter Balance "); 
      amount = Double.parseDouble(input.readLine()); 

      // Making sure account numbers are between 0 and 9999 
      if(acct >=0 && acct <= 9999) { 
       file.seek(acct*17); 
       file.write(truncateName(name)); 
       file.writeBytes(" " +amount); 
      } 
      else { 
       continue; 
      } 
      // Asks user if more entries are needed 
      System.out.println("Enter More? (y/n)"); 
      if (input.readLine().toLowerCase().equals("n")) 
       break; 
     } 
     file.close(); 
    } 
     catch (Exception e) { 
     } 
    } 

// Truncate/adding spaces to name until 8 characters 
    public static byte[] truncateName (String name) { 
    byte[] result = new byte[8]; 
    for (int i = 0; i < 8; i++) 
     result [i] = i < name.length() ? (byte)name.charAt (i) : (byte)' '; 
    return result; 
    } 

} 

Теперь я пытаюсь сделать приложение, которое будет записывать обратно все счета, которые имеют информацию в них (с фамилией и балансом). Мне нужно отобразить номер счета, баланс и фамилию этих учетных записей. До сих пор у меня есть:

import java.io.*; 

public class DisplayBank { 
    public static void main(String[] args) throws IOException { 
    FileInputStream input = new FileInputStream ("bank.txt"); 
    try { 
     byte[] record = new byte[17]; 
     while (input.read(record) == 17) { 
      String name = new String(record, 0, 8); 
      long bits = 0; 
      for (int i = 8; i < 17; i++) { 
       bits <<= 8; 
       bits |= record[i] & 0xFF; 
      } 
      double amount = Double.longBitsToDouble(bits); 

      System.out.println("Account Number: " + record + " Name: " + name + ", amount: " + amount); 
     } 
    } 

    catch (IOException e) { 
    } 
    finally { 
      input.close(); 

    } 
    } 
} 

В настоящее время отображается только имя правильно. Баланс неверен, и я не знаю, как получить номер счета. Чтобы получить номер счета, мне нужно будет получить позицию name. Чтобы получить amount, мне нужно будет искать name, смещать 9 байтов, затем читать следующие 8 байтов ...

+2

Это поможет, если вы включите образец .txt-файла, а также разместите то, что вы видите для баланса, и то, что вы должны видеть. Я бы также предоставил всего 1 образец того, как будет выглядеть хороший результат. – Alos

+0

txt: http://pastebin.com/4ukFWLt9 – Acitropy

+0

Я вижу учетную запись: [B @ 7a15b555, имя: LastName, сумма: -4.136510343669018E-247' для баланса и счета. Я бы хотел (а) 'Учетная запись: 0, Имя: LastName, Amount: 93942.12' – Acitropy

ответ

1

Если вы хотите разобрать текстовый файл, содержащий фамилии и суммы, аналогичные тому, что вы указали:

пример при условии

LastName 93942,12

что бы я сделал это, чтобы попробовать что-то вроде следующего

public void read_file(){ 
    try{ 

    // Open the file that is the first 
    // command line parameter 
    FileInputStream fstream = new FileInputStream("C:\\Users\\Alos\\Desktop\\test.txt"); 
    // Use DataInputStream to read binary NOT text. 
    BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); 
    String strLine; 
    int record = 0; 
    //Read File Line By Line 
    while ((strLine = br.readLine()) != null) { 

     String[] splits = strLine.split("\t"); 
     String LastName = splits[0]; 
     String Amount = splits[1]; 
     System.out.println("Account Number: " + record + " Name: " + LastName + ", amount: " + Amount); 
     record++; 
    } 
    //Close the input stream 
    in.close(); 

     }catch (Exception e){//Catch exception if any 
    System.err.println("Error: " + e.getMessage()); 
    } 

}

Это может быть не совсем то, что вы ищете, но, пожалуйста, взгляните и обновите свой вопрос, если вы хотите что-то другое.

0

Это не домашнее задание, я бы настоятельно рекомендовал использовать некоторые СУБД, такие как Derby или MySQL.

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