Java 查找时使用RandomAccessFile的NullPointerException

Java 查找时使用RandomAccessFile的NullPointerException,java,nullpointerexception,seek,randomaccessfile,Java,Nullpointerexception,Seek,Randomaccessfile,我想介绍有关汽车的信息并将其存档。 我的问题是,当我引入数据时,它显示我发生了一个NullPointerException,我使用“seek”将指针放在我想要的地方 我有一个Java类,我用它来询问用户想要使用什么选项,目前只用于添加car的数据;在其他地方,我想把汽车的数据写入我在同一个地方创建的文件中 $ package Tema1AccesoAleatiroFicheros; import static Tema1AccesoAleatiroFicheros.Controlador.d

我想介绍有关汽车的信息并将其存档。 我的问题是,当我引入数据时,它显示我发生了一个NullPointerException,我使用“seek”将指针放在我想要的地方

我有一个Java类,我用它来询问用户想要使用什么选项,目前只用于添加car的数据;在其他地方,我想把汽车的数据写入我在同一个地方创建的文件中


$

package Tema1AccesoAleatiroFicheros;

import static Tema1AccesoAleatiroFicheros.Controlador.direccion;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.RandomAccessFile;
import java.util.logging.Level;
import java.util.logging.Logger;


public class Controlador {

static String direccion="C:\\Users\\Noneking2\\Desktop\\prueba.dat";
public static RandomAccessFile flujo;
private static int numRegistros=0;
private static int tamRegistro=7;

public static void crearFichero ()
{
    File comprobar=new File(direccion);
    if(!comprobar.exists())
    {
        try 
        {
            File fichero=new File(direccion);
            RandomAccessFile random=new RandomAccessFile(fichero,"rw");
//                FileOutputStream fileout=new FileOutputStream(fichero);
        } 
        catch (FileNotFoundException ex) 
        {
            Logger.getLogger(Controlador.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}

public static void añadirCoche (String [] array)
{
    try 
    {
        flujo.seek(numRegistros*tamRegistro);
    }
//        catch (NullPointerException n)
//        {
//            System.out.println("NullPointerException success");
//        }
    catch (IOException ex) 
    {
        Logger.getLogger(Controlador.class.getName()).log(Level.SEVERE, null, ex);
    }

    for(int i=0;i<array.length;i++)
    {
//            try 
//            {
//                flujo.writeUTF(array[i]);
//            } 
//            catch (IOException ex) 
//            {
//                Logger.getLogger(Controlador.class.getName()).log(Level.SEVERE, null, ex);
//            }
    }
    numRegistros++;
}

}
tema1accesolatiroficheros包;
导入静态Tema1AccesoAleatiroFicheros.Controlador.direccion;
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.io.ObjectOutputStream;
导入java.io.RandomAccessFile;
导入java.util.logging.Level;
导入java.util.logging.Logger;
公共类控制程序{
静态字符串direccion=“C:\\Users\\Noneking2\\Desktop\\prueba.dat”;
公共静态随机存取文件flujo;
私有静态int numRegistros=0;
私有静态int tamRegistro=7;
公共静态无效凭证()
{
文件压缩=新文件(目录);
如果(!compobar.exists())
{
尝试
{
File fichero=新文件(目录);
RandomAccessFile random=新的RandomAccessFile(fichero,“rw”);
//FileOutputStream fileout=新的FileOutputStream(fichero);
} 
捕获(FileNotFoundException ex)
{
Logger.getLogger(Controlador.class.getName()).log(Level.SEVERE,null,ex);
}
}
}
公共静态void añadirCoche(字符串[]数组)
{
尝试
{
flujo.seek(numRegistros*tamlistro);
}
//捕获(NullPointerException n)
//        {
//System.out.println(“NullPointerException成功”);
//        }
捕获(IOEX异常)
{
Logger.getLogger(Controlador.class.getName()).log(Level.SEVERE,null,ex);
}

对于(int i=0;i而言,您获得空指针异常的原因是您从未将值赋值给flujo,因此它从您声明它时起一直为空

这个

基本上与

RandomAccessFile flujo = null;
因为它总是空的,所以从对象调用方法会抛出错误

此外,以下代码不会对程序产生任何影响(除非抛出异常),因为一旦退出try-catch块,垃圾收集器就会整理并删除这些变量。您可能希望在块外或类内初始化它们

    try 
        {
            File fichero=new File(direccion);
            RandomAccessFile random=new RandomAccessFile(fichero,"rw");
             // FileOutputStream fileout=new FileOutputStream(fichero);
        } 
了解变量范围

请构造一个变量范围。
RandomAccessFile flujo = null;
    try 
        {
            File fichero=new File(direccion);
            RandomAccessFile random=new RandomAccessFile(fichero,"rw");
             // FileOutputStream fileout=new FileOutputStream(fichero);
        }