Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java EOFEException随机访问文件读取_Java - Fatal编程技术网

Java EOFEException随机访问文件读取

Java EOFEException随机访问文件读取,java,Java,根据返回的散列实现文件访问中的读写对象,我在读写链时遇到一个错误EOFEException 我的写作方法是这样的 private void escribirCadena( RandomAccessFile archivo, String cadena )throws IOException { StringBuffer bufer = null; if ( cadena != null )bufer = new StringBuffer( cadena ); bufer.se

根据返回的散列实现文件访问中的读写对象,我在读写链时遇到一个错误EOFEException

我的写作方法是这样的

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', ' ' );
}
public Persona obtenerRegistro(inti)抛出IOException{
如果(i>=0&&i
我使用两个String类型属性的附加数据对象 我为方法
leerCadena
标记错误,行
temp=archivo.readChar()


谢谢

我相信您正在阅读超出容量的文件。您只能在到达文件结尾(EOF)之前读取。检查JavaDocs中用于读取文件的类。它会告诉你“文件结束”的情况。

不是因为你的人数不够吗

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

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

修改您建议的内容,错误仍然存在。修改上面的代码,以便您可以检查文件是否足够大,可以包含numeroRegistros条目?您真的存储了条目吗?@zbynek-vyskovsky-kvr000 probe only插入记录并使其正常化,但当我想从文件位置获取数据时,获取错误在我身上哪里会出错?
if(i >= 0 && i < NumeroRegistros) {