Comment stocker et lire un tableau la liste des objets en java?
Je vais avoir des difficultés w/écriture et la lecture d'un tableau d'objets à partir d'un fichier.
C'est de cette façon que je ressemble à:
package registar;
import java.io.Serializable;
public class Vozilo implements Serializable {
private static final long serialVersionUID = -5302010108271068350L;
private String registracija;
private String marka;
private String kategorija;
private int kubikaza;
public Vozilo(String registracija, String marka, String kategorija,
int kubikaza) {
super();
this.registracija = registracija;
this.marka = marka;
this.kategorija = kategorija;
this.kubikaza = kubikaza;
}
/* ALL GETTERS AND SETTERS ARE BELOW */
Je suis en utilisant la base des éléments d'interface pour obtenir l'entrée et l'enregistrer comme objet dans un fichier...
J'utilise le code suivant pour écrire dans un fichier nommé "test.dat" w/fiable drapeau:
final ObjectOutputStream fos = new ObjectOutputStream(new FileOutputStream("test.dat", true));
Vozilo novo = new Vozilo(txtRegistracija.getText(), txtMarka.getText(), cbKat.getSelectedItem().toString(), Integer.parseInt(txtKubikaza.getText()) );
try {
fos.writeObject(novo);
fos.close();
JOptionPane.showMessageDialog(unos, "Car was added!");
} catch (IOException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(unos, "Car was NOT added!");
}
Et le code suivant pour lire à partir du fichier:
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("test.dat"));
ArrayList<Vozilo> list = new ArrayList<Vozilo>();
Vozilo vozilo = (Vozilo) ois.readObject();
list.add(vozilo);
ois.close();
for (Vozilo voz : list) {
System.out.println("Marka: " + voz.getMarka() + "\n");
}
Le problème est que je suis incapable de lire tous les objets à partir d'un fichier, seul le premier est montré, et il iver retourne IndexOutOfBounds exception :\
Ce que je fais mal?
P. S. Si la solution est évidente, ne vous embêtez pas, je n'ai pas dormi depuis plus de 24h 😛
Vous en remercie d'avance!!!!!
Nikola
OriginalL'auteur Nikola | 2010-08-08
Vous devez vous connecter pour publier un commentaire.
Vous vous contentez de lire le premier objet que vous mettez dans le fichier depuis ce:
n'est pas dans une boucle.
Ce que vous pourriez faire est peut-être d'écrire l'ensemble de la liste comme un objet pour le fichier, puis de le lire, au lieu de l'écriture et de la lecture d'un objet à la fois.
Excellente idée! Il a travaillé! J'ai fait tout comme vous l'avez suggéré 😀 j'ai eu quelques bugs mineurs, tous fixés à maintenant. Solution acceptée 🙂 Merci à vous, npinti!
Vous êtes les Bienvenus 🙂
OriginalL'auteur npinti
Vous pouvez ajouter une boucle comme suit:
Cependant, vous devez traiter avec des EOFException quand il atteint la fin du fichier.
PS: veuillez utiliser close() dans le bloc finally 🙂
readObject()
ne pas retourner la valeur null à la fin du flux: il peut le faire tout le temps que vous avez écrit une valeur nulle, et en boucle jusqu'à ce qu'il fait n'est pas valide. Vous avez besoin d'une boucle jusqu'à ceEOFException
est pris.OriginalL'auteur Andy Lin
Le code vous montrer n'a pas une boucle autour de la readObject appel, de sorte qu'il serait lu que le premier objet. Si ce n'est pas le problème, merci de poster le code qui ne fonctionne pas.
OriginalL'auteur Javid Jamae
Vous tentez l'impossible. Vous ne pouvez pas ajouter des objets dans un fichier avec un ObjectOutputStream et les faire revenir à nouveau, parce que ObjectOutputStreams ont des en-têtes qui ne seront pas compris quand vous lisez le fichier, sauf si vous pouvez vous organiser pour savoir où sont les limites entre les ajoute sont et de créer un nouveau ObjectInputStream à chaque fois selon le cas. En général, c'est impossible de l'onu;sse vous avez un indice supplémentaire pour le fichier, dans le cas qui vous pourriez aussi bien à l'aide de gouttes dans un dataase. Vous avez pu lire le fichier et écrire une nouvelle avec l'original de tous les objets ainsi que les nouvelles un, à chaque fois, ou mieux encore, laissez-le ouvert pendant que vous avez encore des objets d'écrire, si possible.
OriginalL'auteur user207421
Vous vous contentez de lire le premier objet. Si vous avez besoin d'une boucle dans laquelle vous pouvez garder la lecture à partir du lecteur(à l'aide de
readObject
méthode) jusqu'à ce qu'il atteigne la fin.readObject()
ne pas retourner la valeur null à la fin du flux: il peut le faire tout le temps que vous avez écrit une valeur nulle, et en boucle jusqu'à ce qu'il fait n'est pas valide. Vous avez besoin d'une boucle jusqu'à ceEOFException
est pris.OriginalL'auteur Amrit Singh