Я создал приложение, которое позволяет пользователю вводить номер своей учетной записи, баланс (не более 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 байтов ...
Это поможет, если вы включите образец .txt-файла, а также разместите то, что вы видите для баланса, и то, что вы должны видеть. Я бы также предоставил всего 1 образец того, как будет выглядеть хороший результат. – Alos
txt: http://pastebin.com/4ukFWLt9 – Acitropy
Я вижу учетную запись: [B @ 7a15b555, имя: LastName, сумма: -4.136510343669018E-247' для баланса и счета. Я бы хотел (а) 'Учетная запись: 0, Имя: LastName, Amount: 93942.12' – Acitropy