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