2013-05-02 4 views
0

У меня проблемы с получением моей программы для чтения входного файла из того же каталога. код находится в Main, включил в себя все просто, я сделал что-то вне основного, что вызывает это.Почему это не читает мой файл?

import java.io.*; 
import java.util.*; 


public class Final 
{ 
    public static int readData(BusinessDirectory [] array, Scanner input,Scanner inputFile) 
    { 
     int lastChar = 0; 
     int count =0; 
     int dirChoice = 0; 

     int area, 
      exchange, 
      number, 
      extension; 
     String name; 


     while(inputFile.hasNextLine() && count < array.length) 
     { 

      String Og = inputFile.nextLine(); 
      lastChar = (Og.length()-1); 
      dirChoice = Integer.parseInt(Og.substring(0,1)); 
      if(dirChoice == 1) 
      { 
       area = Integer.parseInt(Og.substring(2,5)); 
       exchange = Integer.parseInt(Og.substring(6,9)); 
       number = Integer.parseInt(Og.substring(10,14)); 
       name = Og.substring(15,lastChar); 
       array[count].DirectorySet(area, exchange, number, name); 

      } 

      if(dirChoice == 2) 
      { 
       area = Integer.parseInt(Og.substring(2,5)); 
       exchange = Integer.parseInt(Og.substring(6,9)); 
       number = Integer.parseInt(Og.substring(10,14)); 
       extension = Integer.parseInt(Og.substring(15,19)); 
       name = Og.substring(20,lastChar); 
       array[count].BusinessDirectorySet(area, exchange, number, extension, name); 
      } 
     } 
     return count; 
     } 

    public static void main(String[]args)throws IOException 
    { 
     String infile; 
     int count=0;; 

     //Directory[]array = new Directory[25]; 
     BusinessDirectory[]array = new BusinessDirectory[25]; 
     Scanner in = new Scanner(System.in); 
     System.out.print("What is the input file: "); 
      infile = in.next(); 


     try 
     { 
      File inputFile = new File(infile); 
      Scanner fin = new Scanner(inputFile); 
      readData(array, in, fin); 
      System.out.println(BusinessDirectory.getName()); 
     // System.out.println("test"); 
      //count = readData(array,in,inputFile); 
     } 

     catch(Exception e) 
     { 
      System.out.println("\"" + infile + "\" not found. Program will terminate."); 
      System.exit(0); 
     } 


     } 
    } 

Он всегда выбрасывает Исключение из улова. («test.txt» не найден. Программа прекращается.)

e.printStackTrace(); получает меня

What is the input file: test.txt 
java.lang.NullPointerException 
"test.txt" not found. Program will terminate. 
    at Final.readData(Final.java:36) 
    at Final.main(Final.java:69) 

Ошибка, кажется, в моем каталоге класса

public class Directory 
{ 
    //data members 
    static int Area; 
    static int Exchange; 
    static int Number; 
    static String Name; 
    static int cause; 

    public Directory() 
    { 
     Area = 999; 
     Exchange = 999; 
     Number = 9999; 
     Name = ""; 
     cause = 0; 
    } 
    public Directory(int area, int exchange, int number, String name) 
    { 
     DirectorySet(number, number, number, name); 
    } 

    public void DirectorySet(int area, int exchange, int number, String name) 
    { 
     try 
     { 
      if(area >= 200 && area <= 999 && area != 911) 
      { 
       if(exchange >= 200 && exchange <= 999 && exchange !=911) 
       { 
        if(number >= 0 && number <= 9999) 
        { 
         Area = area; 
         Exchange = exchange; 
         Number = number; 
         Name = name; 
        }else 
         { 
         cause = 1; 
         MyOwnException error = new MyOwnException(); 
         MyOwnException.Message = error.setMessage(cause); 
         throw error; 
         } 
        }else if(exchange == 911 || area == 911) 
         { 
         cause = 4; 
         MyOwnException error = new MyOwnException(); 
         MyOwnException.Message = error.setMessage(cause); 
         throw error; 
         } 

       cause = 2; 
       MyOwnException error = new MyOwnException(); 
       MyOwnException.Message = error.setMessage(cause); 
       throw error;    
       }else 
        { 
        cause = 3; 
        MyOwnException error = new MyOwnException(); 
        MyOwnException.Message = error.setMessage(cause); 
        throw error; 
        } 
      } 
     catch(MyOwnException error) 
     { 
      System.out.println(toString()); 
      System.out.println(MyOwnException.Message); 
      //System.out.println(Directory.toString()); 
     } 


    } 

    public void toString(int area, int exchange, int number, String name) 
    { 
     System.out.println(name + " (" + area + ") " + exchange + " -" + number); 
    } 
    public String toString() 
    { 
     return (Name + " (" + Area + ") " + Exchange + " -" + Number); 
    } 
    public static String getName() 
    { 
     return Name; 
    } 

    public static int getArea() 
    { 
     return Area; 
    } 

    public static int getExchange() 
    { 
     return Exchange; 
    } 

    public static int getNumber() 
    { 
     return Number; 
    } 

    public void setName(String name) 
    { 
     Name = name; 
    } 
    public void setArea(int area) 
    { 
     Area = area; 
    } 
    public void setExchange(int exchange) 
    { 
     Exchange = exchange; 
    } 
    public void setNumber(int number) 
    { 
     Number = number; 
    } 

} 

..

Final.readData(Final.java:37) 
array[count].DirectorySet(area, exchange, number, name); 

Final.main(Final.java:73) 
readData(array, fin); 
+5

** Какое ** исключение выбрасывается? Откуда именно? Что вы не понимаете в сообщении об исключении? – Mat

+0

какое исключение выбрасывается? и где? – redc0w

+1

Я думаю, что вы не обеспечиваете правильный путь к файлу. –

ответ

0

Ваш NullPointerException, кажется, брошен на этой линии:

array[count].DirectorySet(area, exchange, number, name); 

Проблема заключается в том, что вы правильно создали array таким образом:

BusinessDirectory[]array = new BusinessDirectory[25]; 

Но это создает только пространство для 25 указателей объектов , который фактически не создает 25 объектов.

Вы должны создать каждый объект по одному, в вашем случае, вероятно, вы должны сделать это:

array[count] = new Directory(area, exchange, number, name); 

вместо этого:

array[count].DirectorySet(area, exchange, number, name); 

Кроме того, вы, кажется, не увеличивать count в любом месте.

+0

Спасибо, ты меня на правильном пути! – Thorn11166

0

Try:

File inputFile = new File(infile); 
System.out.println(inputFile.getAbsolutePath()); 

Это даст вам подсказку о том, ваш рабочий каталог и лет u может исправить ваш вход (абсолютные или относительные пути)

Также рекомендуется, чтобы, если вы не уверены в относительном местоположении и не хотите использовать абсолютные пути, используйте API File.exists(), чтобы принять решение в рамках вашего кода ,

Смежные вопросы