我有一些奇怪的问题,但我希望能找到解决方案。
我在java中创建了一个构造函数,它在创建构造函数类的对象时从文本文件中读取。
如果此文件存在,则即使它是空的,也会读取其数据。
但我希望解决方案能够处理(文件不存在)的错误,因为这会导致我的程序崩溃。
这是我的代码:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;
public class Inventory{
public Inventory(){
Scanner x = null;
try{
x = new Scanner(new File("C:\\Users\\فاطمة\\Downloads\\products.txt"));
}
catch(Exception e)
{
System.out.println("No current products.");
}
while(x.hasNext())
{
String a = x.next(); // id
String b = x.next(); // product name
String c = x.next(); // product type
String d = x.next(); // product brand
int e = x.nextInt(); // product quantity
int f = x.nextInt(); // production day
int g = x.nextInt(); // production month
int h = x.nextInt(); // production year
int i = x.nextInt(); // expiry day
int j = x.nextInt(); // expiry month
int k = x.nextInt(); // expiry year
String l = x.next(); // company name
String m = x.next(); // supplier name
String n = x.next(); // supplier address
String p = x.next(); // supplier phone number
}
}
}
答案 0 :(得分:1)
查看代码中的逻辑流程。即使文件/扫描仪行引发错误(即,如果找不到该文件),您仍然会尝试读取它。
您正在寻找的解决方案是
Scanner x = null;
try {
x = new Scanner(new File("C:\\Users\\فاطمة\\Downloads\\products.txt"));
while(x.hasNext()) {
String a = x.next(); // id
String b = x.next(); // product name
String c = x.next(); // product type
String d = x.next(); // product brand
int e = x.nextInt(); // product quantity
int f = x.nextInt(); // production day
int g = x.nextInt(); // production month
int h = x.nextInt(); // production year
int i = x.nextInt(); // expiry day
int j = x.nextInt(); // expiry month
int k = x.nextInt(); // expiry year
String l = x.next(); // company name
String m = x.next(); // supplier name
String n = x.next(); // supplier address
String p = x.next(); // supplier phone number
}
} catch(Exception e) {
System.out.println("No current products.");
}
你应该做什么而不是捕捉Exception
会遇到像FileNotFoundException
这样的特定错误,或者,如果你想捕捉所有错误,请保持原样,但我建议你检查错误并使用类似
...
} catch (Exception e) {
if (e instanceof FileNotFoundException) {
System.out.println("could not find the file...");
} else {
System.out.println("something else went wrong");
}
}
请记住,如果您的while循环位于try ... catch
块内,则读取文件时抛出的错误也会被捕获。
更明确地捕获多种类型错误的方法是
...
} catch (FileNotFoundException e) {
System.out.println("file not found");
} catch (Exception e) {
System.out.println("something else went wrong");
} ...