从java中不存在的文本文件中读取?

时间:2015-10-28 17:19:52

标签: java file-io text-files

我有一些奇怪的问题,但我希望能找到解决方案。

我在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
        }
    }
}

1 个答案:

答案 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");
} ...