2015-11-25 3 views
-1

У меня вопрос. теперь я сериализую много объектов в двоичном файле student.binУдалить все объекты в java?

после добавления данных объекта в двоичном файле теперь я хочу получить все данные, записанные в двоичном файле.

, но он только извлекает первые данные объекта.

вопрос: как получить все содержимое файла?

вот мой код:

import java.util.Scanner; 
import java.io.*; 
import java.io.Serializable; 

public class Binary implements Serializable{ 

public int id; 
public String name; 
public int grade; 

public static void main(String argv[]) throws IOException, ClassNotFoundException 
{ 
    Binary b = new Binary(); 
    Scanner sc = new Scanner(System.in); 
    System.out.printf("Enter student id: "); 
    b.id = sc.nextInt(); 
    System.out.printf("Enter student name: "); 
    b.name = sc.next(); 
    System.out.printf("Enter student grade: "); 
    b.grade = sc.nextInt(); 
    ObjectOutputStream bin = new ObjectOutputStream(new FileOutputStream("C:\\Users\\فاطمة\\Downloads\\student.bin",true)); 
    bin.writeObject(b); 
    bin.close(); 

    ObjectInputStream in = new ObjectInputStream(new FileInputStream("C:\\Users\\فاطمة\\Downloads\\student.bin")); 
    Binary b2 = (Binary)in.readObject(); 
    System.out.println("Student ID: " + b2.id); 
    System.out.println("Student Name: " + b2.name); 
    System.out.println("Student Grade: " + b2.grade); 
    in.close(); 

} 
} 

ответ

0

Используйте время цикла. Потоки имеют метод hasNext, который позволит вам продолжать чтение объектов, пока в файле есть непрочитанные байты. Обратите внимание: если в конце файла есть дополнительные байты, это приведет к ошибке.

List<Binary> binaries = new ArrayList<Binary>(); 
while(in.hasNext()) { 
    binaries.add((Binary) in.readObject()); 
} 

Приносим извинения, если это недействительно, у меня нет доступа для проверки его прямо сейчас.

Редактировать: Возможно hasNext - это метод сканера, а не поток, и в этом случае вам придется обернуть поток в объекте сканера: Scanner read = new Scanner(in).

+0

спасибо за ответ, но как распечатать элементы ??? –

+0

вы не ответили на весь вопрос. Я хочу напечатать все данные объектов отдельно ... например, если у меня есть данные объекта, подобные этому (1, «Джон», 50), поэтому он должен быть напечатан как мой выводный оператор, который я написал в моем коде выше. данные каждого объекта должны быть напечатаны отдельно. –

+0

Входные потоки не имеют методов 'hasNext()', и вы не можете одновременно использовать «Сканер» и «ObjectInputStream» в одном и том же базовом потоке. Вы этого не пробовали. – EJP