2014-10-04 5 views
0

자동차에 대한 정보를 소개하고 파일에 보관하려고합니다. 내 문제는 내가 데이터를 소개 할 때 그것이 내가 원하는 위치에 포인터를 배치하기 위해 "찾기"를 사용하는 NullPointerException이 발생했다는 것을 보여주는 것입니다.검색시 RandomAccesssFile을 사용하는 NullPointerException

저는 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++; 
} 

} 
+2

A [최소 테스트 케이스] 구성주세요 (http://stackoverflow.com/help/mcve). –

답변

0
에서 만든 파일 자동차의 데이터를 기록 할 위치를 다른

당신이 널 포인터 예외를 얻고있는 이유는 당신이다 는 flujo에 값을 할당하지 않으므로 선언 한 시점부터 null이 유지됩니다. 이 객체에서 메소드를 호출, 항상 null 인 오류가 발생하기 때문에

RandomAccessFile flujo; 
        ^no value is being assigned 

는 기본적으로

RandomAccessFile flujo = null; 

과 동일합니다.

또한 다음 코드는 예외가 throw되지 않는 한 프로그램에 아무런 영향을주지 않습니다. try-catch 블록을 종료하자마자 가비지 수집기에서 이러한 변수를 정리하고 삭제하기 때문입니다. 블록 외부 또는 클래스 내에서 초기화 할 수 있습니다.

try 
     { 
      File fichero=new File(direccion); 
      RandomAccessFile random=new RandomAccessFile(fichero,"rw"); 
      // FileOutputStream fileout=new FileOutputStream(fichero); 
     } 

가변 범위에 대해 알아 here

관련 문제