2

所以我是 Java 新手,我正在尝试的一切都不起作用。从文件中读取有很多不同的方法,所以我想知道最简单的方法。基本上,它是一个 Mad Libs 应用程序。一种方法。我一直在尝试成功运行它,但file.close()函数出现错误。如果我把它拿走,我会得到FileNotFoundException errors。所以我有点迷路了。我应该改变什么?

public static void main(String[] args) throws Exception {
    String[] nouns = new String[4];
    String[] verbs = new String[6];
    String[] adjectives = new String[7];
    Scanner s = new Scanner(System.in);
    System.out.println("Please input 4 nouns, press \"Enter\" after each input.");
    for(int i=0; i<4; i++){
        nouns[i] = s.next();
    }
    System.out.println("Please input 6 verbs, press \"Enter\" after each input.");
    for(int i=0; i<6; i++){
        verbs[i] = s.next();
    }
    System.out.println("Please input 7 adjectives, press \"Enter\" after each input.");
    for(int i=0; i<7; i++){
        adjectives[i] = s.next();
    }
    File file = null;
    FileReader fr = null;
    LineNumberReader lnr = null;

    try {
        file = new File("H:\\10GraceK\\AP Computer Science\\Classwork\\src\\madlib.txt");
        fr = new FileReader(file);           
        lnr = new LineNumberReader(fr);
        String line = "";           
        while ((line = lnr.readLine()) != null) {
            System.out.println(line);               
        }
    } finally {
        if (fr != null) {
            fr.close();
        }
        if (lnr != null) {
            lnr.close();
        }
    }
}

好的,我修复了异常。现在文件中的文本读取动词 [0] 和类似的东西,但它实际上输出动词 [0],而不是数组中的单词。如何将数组中的字符串附加到读取的字符串?

4

3 回答 3

6

该方法close未定义File。改为使用FileReader.close。代替

file.close();

fr.close();

事实上,平仓LineNumberReader就足够了,因为这将平仓底层证券FileReader。您可以将其close放在一个finally块中。看这个例子

于 2013-01-02T21:54:02.560 回答
2

与往常一样,在读取文件和流时,我必须推荐commons-io 。

尝试使用例如:

IOUtils.readLines

您的代码中的错误是@Reimeus 提到了缺少的方法。

于 2013-01-02T21:58:32.437 回答
0

Scanner API 得到了改进,变得更加简单:

try {
    Scanner sc = new Scanner(new File("text.txt"));
    sc.useDelimiter(System.getProperty("line.separator"));
    String ln = sc.next();

} catch (FileNotFoundException ex) {
    Logger.getLogger(this.class.getName()).log(Level.SEVERE, null, ex);
}
于 2013-01-02T22:11:54.253 回答