Java 为什么这不读取我的文件?
让程序从同一目录读取输入文件时遇到问题。 代码在Main中,包括了整个代码,以防我在Main之外做了一些导致这种情况的事情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;
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);