2013-05-02 83 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); 
     } 


     } 
    } 

它总是从Catch抛出异常。 (“test.txt”not found。程序将终止。)

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 2013-05-02 07:58:27

+0

抛出什么异常?和哪里? – redc0w 2013-05-02 07:58:29

+1

我认为你没有正确提供文件路径。 – 2013-05-02 07:59:06

回答

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 2013-05-02 08:34:38

0

尝试:

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

这会给你一个关于提示你的工作目录和哟你可以修复你的输入(绝对路径或相对路径)

此外,建议如果你不确定相对位置并且不希望使用绝对路径,请使用File.exists() API在代码中作出决定。

相关问题