读取txt文件并编写字典

时间:2016-11-19 11:15:38

标签: java file java.util.scanner file-not-found

我的目标是最终制作一个拼写检查器,但我需要一个单词词典才能做到这一点。

这里我试图允许用户输入任意数量的文本文件,只要文件名之间有空格(“novel1.txt novel2.txt novel3.txt”)。

我将使用这些小说中的每个单词写入单个行上的单个单词的.dat文件(即单词词典)。但是,即使我知道我有文件,我在Scanner read = new Scanner(new File(filenames[i]));收到文件未找到错误。

我甚至尝试将其放入源包中以确保可以找到它。

在我的代码的最底部是我运行的一个小测试(首先评论其他代码)并确实打印“war.txt不是文件”,即使我可以清楚地看到我有txt文件并正确输入。

有人可以告诉我为什么java没有看到我的txt文件或者可能认为它不是普通文件吗?

public static void main(String[] args) throws FileNotFoundException {

    Scanner in = new Scanner(System.in);

    System.out.println("Please enter the file names exactly.");

    String userInput = in.nextLine();
    String[] filenames = userInput.split(" "); // turning user input string into a string array so I can look at each string individually

    // takes each individual string from filenames and turns each one into the file
    // that the string should represent then adds the file's contents to my dictionary
    for(int i = 0; i < filenames.length; i++){
        Scanner read = new Scanner(new File(filenames[i]));
        String word = null;
        while(read.hasNext()){
            if(read.next().length() >= 2){
                word = read.next();
                // write word into myDict.dat
            }
            System.out.println(word);
        }
    }
    File war = new File("war.txt");
    if(!war.isFile()){
        System.out.println(war + " isn't a file.");
    }
}

2 个答案:

答案 0 :(得分:0)

我相信你以错误的方式做某事。请尝试以下示例,并将其与实际文件位置进行比较。

<强> Demo.java

import java.io.*;
class Demo {
    public static void main(String[] args) throws IOException {
        File war = new File("war.txt");
        if(!war.isFile()){
            System.out.println(war + " isn't a file.");
        } else {
            System.out.println(war + " is a file.");
        }
    }
}

编译并运行它

javac Demo.java
java Demo

输出

war.txt isn't a file.

现在在同一目录中创建war.txt

echo "foobar" > war.txt

再次运行代码

java Demo

输出

war.txt is a file.

答案 1 :(得分:0)

对于FileNotFoundException,如果只插入文件名(例如,如果使用eclipse将文件放在项目的根文件夹中),请确保文件在您的类路径中。

对于war.txt问题,您应该这样做:

File war = new File("war.txt");
if (!war.exists()) {
    war.createNewFile();
}
if(!war.isFile()){
    System.out.println(war + " isn't a file.");
}

这是因为当你执行File war = new File("war.txt");时你没有创建文件,你必须使用war.createNewFile();明确地创建它。

最后,请注意:

if(read.next().length() >= 2){
    word = read.next();
    // write word into myDict.dat
}
System.out.println(word);

你第二次做read.next()两次而不检查read.hasNext()。你应该写这样的东西:

while(read.hasNext()){
    String next = read.next();
    if(next.length() >= 2){
        word = next;
        // write word into myDict.dat
    }
    System.out.println(word);
}