我想介绍有关汽车的信息并将其保存在文件中。 我的问题是,当我引入数据时,它显示我发生了一个NullPointerException,我使用" seek"将指针放在我想要的位置。
我有一个Java类,我用它来询问用户他想要使用什么操作,目前只添加汽车的数据;以及我想在同一个
中创建的文件中写汽车数据的其他地方package Tema1AccesoAleatiroFicheros;
import java.io.IOException;
import java.util.Scanner;
public class Vista {
public static void main(String[] args) throws IOException {
Scanner sc=new Scanner(System.in);
Controlador coche=new Controlador();
System.out.println("Eliga opción:");
System.out.println("1-Ingresar coche:");
System.out.println("2-Modificar registro:");
System.out.println("3-Salir.");
int opcion=sc.nextInt();
Controlador.crearFichero();
while (opcion!=3)
{
switch(opcion)
{
case 1:
añadir();
break;
case 2:
modificar();
break;
}
System.out.println("Eliga opción:");
System.out.println("1-Ingresar coche:");
System.out.println("2-Modificar registro:");
System.out.println("3-Salir.");
opcion=sc.nextInt();
}
}
public static void añadir ()
{
Scanner sc=new Scanner(System.in);
String[] array=new String[7];
System.out.println("Introduzca código:");
String cod=sc.next();
System.out.println("Introduzca marca:");
String marca=sc.next();
System.out.println("Introduzca modelo:");
String modelo=sc.next();
System.out.println("Introduzca matricula:");
String matricula=sc.next();
System.out.println("Introduzca potencia en caballos:");
int potencia=sc.nextInt();
System.out.println("Introduzca número de plazas:");
int plazas=sc.nextInt();
System.out.println("Introduzca número de puertas:");
int puertas=sc.nextInt();
array[0]=cod;
array[1]=marca;
array[2]=modelo;
array[3]=matricula;
array[4]=Integer.toString(potencia);
array[5]=Integer.toString(plazas);
array[6]=Integer.toString(puertas);
// array[3]=new String(cod);
// array[1]=new String(marca);
// array[2]=new String(modelo);
// array[3]=new String(matricula);
// array[4]=new String(Integer.toString(potencia));
// array[5]=new String(Integer.toString(plazas));
// array[6]=new String(Integer.toString(puertas));
Controlador.añadirCoche(array);
}
public static void modificar ()
{
Scanner sc=new Scanner(System.in);
System.out.println("Introduzca código:");
String codigo=sc.next();
// if(Controlador.buscarRegistro(codigo)!=-1)
{
// int pos=Controlador.buscarRegistro(codigo);
System.out.println("Introduzca código:");
String cod=sc.next();
System.out.println("Introduzca marca:");
String marca=sc.next();
System.out.println("Introduzca modelo:");
String modelo=sc.next();
System.out.println("Introduzca matricula:");
String matricula=sc.next();
System.out.println("Introduzca potencia en caballos:");
int potencia=sc.nextInt();
System.out.println("Introduzca número de plazas:");
int plazas=sc.nextInt();
System.out.println("Introduzca número de puertas:");
int puertas=sc.nextInt();
Modelo mod=new Modelo(cod,marca,modelo,matricula,potencia,plazas,puertas);
// Controlador.setCoche(pos, mod);
}
}
}
$
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++;
}
}
答案 0 :(得分:0)
您获得空指针异常的原因是您永远不会为flujo分配值,因此它在您声明它时仍为空。
此
RandomAccessFile flujo;
^ no value is being assigned
与
基本相同RandomAccessFile flujo = null;
由于它始终为null,因此从对象调用方法会引发错误。
此外,以下代码不会对程序产生任何影响(除非抛出异常),因为一旦退出try-catch块,这些变量将被垃圾回收器整理并删除。您可能希望在块外或类内初始化它们。
try
{
File fichero=new File(direccion);
RandomAccessFile random=new RandomAccessFile(fichero,"rw");
// FileOutputStream fileout=new FileOutputStream(fichero);
}
了解变量范围here