不使用扫描程序从文件中读取

时间:2015-11-29 02:44:29

标签: java file-io

我正在阅读一个非常简单的文件,显示项目和费用。它看起来像这样:

Shoes 10.00
Jersey 20.00
Cookies 15.00
Light Bulbs 2.00
Paper 5.00

我想将每个项目映射到它的成本和我当前的代码工作得很好。但是,它看起来有点笨重并初始化变量为null,我的项目的提交服务器不喜欢并将其视为错误。我正在寻找一种方法将其转换为更优雅的东西,从而学习除了依赖Scanner类之外的其他方式读取文件。也许使用BufferedReader或PrintReader或类似的东西,我从来没有真正掌握过。帮助赞赏。

    private TreeMap<String, Double> prices = new TreeMap<String, Double>();

     public void readFromFile(String fileName){
                File file = new File(fileName);
                Scanner sc = null; //Server treats this as a bug. 
                try {
                    sc = new Scanner(file);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
                while (sc.hasNextLine()) {
                    Scanner sc2 = new Scanner(sc.nextLine());
                    while (sc2.hasNext()) {
                        String s = sc2.next(); //Gets the item name
                        prices.put(s, Double.parseDouble(sc2.next())); //The next word is the price
                        }
                    sc2.close();
                    }
}

2 个答案:

答案 0 :(得分:2)

这是一个例子。抛出异常而不是在方法内处理它们。 BufferedReaderStringTokenizer用于从文件中获取所需的文字。

private TreeMap<String, Double> prices = new TreeMap<String, Double>();

public void readFromFile(String fileName) throws FileNotFoundException, IOException {
    BufferedReader br = new BufferedReader(new FileReader(fileName));
    StringTokenizer st;
    String line;
    while ((line = br.readLine()) != null) {
        st = new StringTokenizer(line.trim(), " ");
        prices.put(st.nextToken(), Double.parseDouble(st.nextToken()));
    }
    br.close();
}

如果fileNamenull,则会自动抛出NullPointerException。如果您想通过您的方法处理它,您可以在方法的顶部添加以下代码..

    if (fileName == null) {
        throw new IllegalArgumentException("Invalid String input for fileName. fileName: " + fileName);
    }

答案 1 :(得分:0)

您可以使用try进行异常处理,而不是使用catchthrows语句。

public void readFromFile(String fileName) throws FileNotFoundException {
    File file = new File(fileName);
    Scanner sc = new Scanner(file);
    ...
}

这应解决您的服务器将null分配视为错误的问题。