无法从.txt文件中读取。尝试Catch异常结束程序

时间:2015-09-07 00:05:06

标签: java io

我搜索了很多页面,无法找到解决方案:

以下代码不是我自己的代码。我正在从youtube视频教程中复制它,看看我是否可以创建游戏并执行它。不幸的是,try catch异常方法说java程序Game无法读取我的 data.txt 文件,该文件大小为1kb,并且与my {{1 }和Game类。

此程序中包含两个 .java 文件和一个 .txt 文件。它对于在youtube上做教程的人来说就像是一个魅力,也许是因为他从命令行编译并运行它,但不适合我(我使用drJava.jar作为我的编译器并运行程序)。

当我尝试从命令行编译时,我得到5个错误,表示符号存在一些问题。它与drJava编译良好。

Game.java如下:

Question

Question.java如下:

import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Game {
    private static ArrayList<Question> questions = new ArrayList<Question>();

    private static void init() {
        try {
            // This is where the problem occurs, can't read data.txt
            List<String> lines = Files.readAllLines(Paths.get("data.txt"));

            for (int i = 0; i < lines.size(); i += 5) {
                Question q = new Question(lines.get(i), lines.get(i + 1), lines.get(i + 2), lines.get(i + 3), lines.get(i + 4));
            }
        } catch (Exception e) {
            System.out.println("Couldn't read file data.txt. System will now exit");
            System.exit(-1);
        }
    }

    private static void loop() {
        Scanner scan = new Scanner(System.in);

        while (questions.size() > 0) {
            Question q = questions.remove(0);
            System.out.println(q.text);
            for (int i = 0; i < q.answers.length; i++) {
                System.out.println(i + " " + q.answers[i]);
            }

            int input = scan.nextInt();

            if (input < 0 || input > q.answers.length - 1) {
                System.out.println("input is invalid");
                System.exit(-1);
            }

            if (q.rightAnswer.equals(q.answers[input])) {
                System.out.println("Right");
            } else {
                System.out.println("Right");
            }
        }
    }

    public static void main(String[] args) {
        init();
        loop();
    }
}

data.txt文件:

  

什么是4x4?
  14个
  25个
  44个
  24个
  R在RGBA中代表什么?
  红
  火箭
  右
  路

2 个答案:

答案 0 :(得分:2)

我对drJava一无所知,但看起来你在导入中拼错了Java.io.File包。可能是drJava忽略了这一点,因此您无法正确访问该库的代码。看看您是否可以使用System.out.println(e);

打印您在捕获中获得的实际异常

这打印了一个超出范围的索引例外。

因此索引超出范围异常意味着您正在尝试访问列表(或数组)范围之外的内容。我怀疑你的代码实际上是成功读取文件。当您尝试在之后循环遍历行时,实际上会发生错误。确保数据文件中没有空行,因为您使用的循环非常危险。用英语思考一下。只要我小于我的列表长度,做一些事情。特别是&#34;大小11&#34;让我觉得你有一个额外的行,它允许循环运行一次比它应该的运行。

答案 1 :(得分:1)

Data.txt与您的程序在同一目录中运行吗?您可能遇到查找错误目录的问题。因此,它不是能够读取文件,而是找到它的情况。

或者,如果指向正确的位置,请检查文件的权限并确保允许读取。