支持自己,Java初学者。我写了一个方法,将文件读取到整数数组列表。
public static ArrayList<Integer> numArray(String numIn) throws FileNotFoundException{
try{
FileReader file = new FileReader(numIn);
Scanner sc = new Scanner(file);
while(sc.hasNext())
{
statusCodes.add(sc.nextInt());
}
sc.close();
}
catch(Exception e)
{
e.printStackTrace();
}
return statusCodes;
}
当我在它自己的类的main方法中运行它时工作正常,但是当我尝试为它运行JUnit测试用例时,它给了我一个FileNotFoundException。
static ArrayList<Integer> newCodes = numArray("src/statCodes.txt");
有人知道如何摆脱这种异常吗?
答案 0 :(得分:1)
当您捕获throws FileNotFoundException
时,无需声明Exception
,这将捕获所有异常,包括catched和untcached(Runtime)异常。
您将获得FileNotFoundException
,因为在您指定的路径中找不到文件。也许尝试使用绝对路径?检查项目的根文件夹是什么,并相应地提供路径。它还取决于你在哪里运行你的junit案例。
答案 1 :(得分:1)
那是因为你的方法声明了(错误的)抛出FileNotFoundException,它本身就被捕获了。
答案 2 :(得分:0)
这是因为它无法从目录中找到您的文件。执行此操作的好方法YourTestClass.class.getResourceAsStream(filename)
,这将返回一个InputStream。也正如大家所说,要么删除你的捕获或抛出条款。
答案 3 :(得分:0)
您的catch语句捕获所有异常并且不会重新抛出它们,因此此方法不需要throw语句。此外,如果您有一个方法在调用该方法时抛出异常,则必须处理它抛出的异常。
您是否也在同一个包中运行JUnit测试?我无法想象你不会,但至少在eclipse中它在本地目录中查找文件,这对于JUnit和主类来说是相同的。
答案 4 :(得分:0)
尽管所有的答案都告诉你,如果你抓住它就不需要抛出异常,那么你在使用JUnit运行测试时可能获得FileNotFoundException
的原因是因为您的测试类可能位于不同的目录中,并且在该情况下,您的文件路径无效。尝试检查相对于测试类的numIn
的值,看看是否使用绝对路径或其他解决方案适合您。
答案 5 :(得分:0)
您可能已经忘记向测试案例的主要方法中添加另一个“引发FileNotFoundException”。