Java 为什么这不读取我的文件?

Java 为什么这不读取我的文件?,java,exception,Java,Exception,让程序从同一目录读取输入文件时遇到问题。 代码在Main中,包括了整个代码,以防我在Main之外做了一些导致这种情况的事情 import java.io.*; import java.util.*; public class Final { public static int readData(BusinessDirectory [] array, Scanner input,Scanner inputFile) { int lastChar = 0;

让程序从同一目录读取输入文件时遇到问题。 代码在Main中,包括了整个代码,以防我在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);
        }


        }
    }
错误似乎在我的目录类中

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;
    }

}
尝试:

这将为您提供有关工作目录的提示,您可以修复输入(绝对或相对路径)


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

您的
NullPointerException
似乎在这一行抛出:

array[count].DirectorySet(area, exchange, number, name);
问题是您通过以下方式正确创建了
数组

BusinessDirectory[]array = new BusinessDirectory[25];
但这只为25个对象指针创建了空间,实际上并没有创建25个对象

您必须逐个创建每个对象,在您的情况下,您可能应该这样做:

array[count] = new Directory(area, exchange, number, name);
与此相反:

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

此外,您似乎没有在任何地方增加
计数。

引发了什么异常?到底从哪里来的?关于异常消息,您不了解什么?我认为您没有正确地提供文件路径。请注意,这并不是因为它引发异常,而是自动执行
FileNotFoundException
,您至少应该打印
e.getMessage()
。将
catch(异常e){
更改为
catch(异常e){e.printStackTrace();
您可以执行两个捕获。一个捕获就像您现在拥有的一样,但将println更改为
e.printStackTrace()
。第二个捕获可以是
捕获(FileNotFoundException ex)
BusinessDirectory[]array = new BusinessDirectory[25];
array[count] = new Directory(area, exchange, number, name);
array[count].DirectorySet(area, exchange, number, name);