Pourquoi puis-je obtenir l'exception java.io.EOFException et l'erreur ArrayOutOfBounds? De l'aide?


J'essaie de créer une sorte d'interface graphique simple où j'essaie d'enregistrer quelques chaînes et doubles et un int, j'utilise la propriété de base de OOP qui est l'héritage J'ai créé une classe Autos qui est essentiellement la super Classe.

Le problème semble se poser dans une méthode appelée "cargarDatosAutos" c'est dans ma classe GUI, et voici le code:

private void cargarDatosAutos()
{
    regInt = at.numRegistros(); // number of registry
    if (regInt != -1)
    {
        curInt = 0;
        ats = new AutosRentables[regInt];
        try
        {
            RandomAccessFile f = new RandomAccessFile("Autos.txt", "rw");
            at.cargarDatos(f, ats, regInt); // method in subclass
            f.close();
        }
        catch (IOException ex)
        {
            Logger.getLogger(Interfaz3.class.getName()).log(Level.SEVERE, null, ex);
        }
        this.mostrarAutos(ats[0]); // shows data
    }
}

Voici les erreurs:

4-Dec-2011 11:35:20 PM rent_autos.Interfaz3 cargarDatosAutos
SEVERE: null
java.io.EOFException
at java.io.RandomAccessFile.readChar(RandomAccessFile.java:695)
at rent_autos.Autos.leerModelo(Autos.java:139)
at rent_autos.AutosRentables.cargarDatos(AutosRentables.java:84)
at rent_autos.Interfaz3.cargarDatosAutos(Interfaz3.java:6076)
at rent_autos.Interfaz3.<init>(Interfaz3.java:38)
at rent_autos.Interfaz3$159.run(Interfaz3.java:6107)

Le leerModelo est une méthode qui lit les chaînes:

public String leerModelo(RandomAccessFile file) throws IOException
{
    char cadena[] = new char[25], temp;
    for (int c = 0; c < cadena.length; c++)
    {
        temp = file.readChar();
        cadena[c] = temp;
    }
    return new String(cadena).replace('\0', ' ');
}

Et le cargarDatos est de charger mes données:

public void cargarDatos(RandomAccessFile file, AutosRentables[] lista, int reg) throws IOException
{
    int cont = 0;
    do
    {

        modelo = this.leerModelo(file);
        color = this.leerColor(file);
        tipoAM = this.leerTipoAM(file);
        rendimientoGalon = file.readDouble();
        placa = this.leerPlaca(file);
        ACRISS = this.leerACRISS(file);
        codigo = file.readInt();
        costo = file.readDouble();
        marca = this.leerMarca(file);
        detalles = this.leerDetalles(file);

        lista[cont] = new AutosRentables(modelo, color, tipoAM, rendimientoGalon, placa, ACRISS, codigo, costo, marca, detalles);
        cont++;
        System.out.println("Entra");
    }
    while (cont < reg);
}

Et voici l'erreur ArrayoutOfbound:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0
at rent_autos.Interfaz3.cargarDatosAutos(Interfaz3.java:6081)
at rent_autos.Interfaz3.<init>(Interfaz3.java:38)
at rent_autos.Interfaz3$159.run(Interfaz3.java:6107)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)

Donc, si quelqu'un sait ce qui se passe, aidez-moi ici... est-ce la taille d'octet du fichier? Je ne sais pas vraiment, à l'AIDE!

Author: wattostudios, 2011-12-05

2 answers

EOFException signifie que vous avez essayé de lire au-delà de la fin du flux; c'est à dire la fin du fichier, dans ce cas. Vous ne vous positionnez probablement pas correctement dans le fichier. La lecture de caractères à partir d'un fichier à accès aléatoire est délicate car vous ne pouvez pas savoir combien d'octets ils sont encodés. Je soupçonne que vous devez redessiner le fichier en fait. Ou bien vous devriez lire des octets et non des caractères s'il provient d'un système externe?

 1
Author: user207421, 2011-12-05 05:56:30

Java.io.EOFException:

Pour java.io.EOFException vérifiez ce lien http://docs.oracle.com/javase/1.4.2/docs/api/java/io/EOFException.html .

ArrayOutOfBounds: Une exception hors limites se produit lorsque vous essayez d'accéder à un tableau avec un index qui dépasse sa longueur. indice maximum d'un tableau java est (longueur -1). Cela signifie que vous essayez d'insérer une valeur dans un élément de tableau qui n'existent pas. Pour le gérer vous devez vous assurer que votre programme ne le fait pas accédez à un tableau avec un index supérieur à la longueur-1.

 1
Author: Rajeev Kumar, 2011-12-05 11:55:50