EOFException RandomAccesFile读取

时间:2015-11-29 06:42:33

标签: java

根据返回的哈希在文件访问中实现读取和写入对象,在读写链时遇到错误EOFException。

我的写作方法就是这样。

private void escribirCadena( RandomAccessFile archivo, String cadena )throws IOException
{
   StringBuffer bufer = null;
   if ( cadena != null )bufer = new StringBuffer( cadena );

   bufer.setLength( 6 );
   archivo.writeChars( bufer.toString() );
}

我的注册阅读方法是

public Persona obtenerRegistro( int i ) throws IOException{
   if(i >= 0 && i < NumeroRegistros) {
        archivo.seek(i * Persona.TAMANIO);
        return new Persona(leerCadena(archivo),leerCadena(archivo));
       //return leerCadena(archivo);
    } else {
        System.out.println("\nNúmero de registro fuera de límites.");
        return null;
    }
 }


private String leerCadena( RandomAccessFile archivo ) throws IOException
{
    char nombre[] = new char[6], temp;
   for ( int cuenta = 0; cuenta < nombre.length; cuenta++ ) {
   temp = archivo.readChar();
   nombre[ cuenta ] = temp;
   }

   return new String( nombre ).replace( '\0', ' ' );
}

我使用具有String类型的两个属性的其他数据对象 我为方法leerCadena,第temp = archivo.readChar();

标记了错误

谢谢

2 个答案:

答案 0 :(得分:0)

我相信你正在阅读超出它容量的文件。您应该只读到达到文件结束(EOF)。检查JavaDocs以查找用于读取文件的类。它会告诉你“文件结束”。

答案 1 :(得分:0)

不是因为你超出了人数吗? :

if(i >= 0 && i <= NumeroRegistros) {

应该是:

if(i >= 0 && i < NumeroRegistros) {

除此之外,还有其他一些问题。就像StringBuffer被设置为长度10但在写入之前它被设置为30。