扫描仪文本文件

时间:2013-04-06 17:59:33

标签: java file text nosuchelementexception

我正在为一个程序编写代码,该程序从文本文件中获取单词并按字母顺序排列,但我似乎无法使扫描程序正常工作?

public static void Option1Method() throws IOException {
    FileWriter aFileWriter = new FileWriter("wordlist.txt", true);
    PrintWriter out = new PrintWriter(aFileWriter);
    String word = JOptionPane.showInputDialog(null, "Enter a word");

    out.println(word);
    out.close();

    aFileWriter.close();

    String inputFile = "wordlist.txt";
    String outputFile = "wordlist.txt";
    FileReader fileReader = new FileReader(inputFile);
    Scanner scan = new Scanner(fileReader);
    scan.nextLine;
    String inputLine;
    List<String> lineList = new ArrayList<String>();
    while ((inputLine = scan.nextLine()) != null) {
        lineList.add(inputLine);
    }
    fileReader.close();

    Collections.sort(lineList);

    FileWriter fileWriter = new FileWriter(outputFile);
    PrintWriter out1 = new PrintWriter(fileWriter);
    for (String outputLine : lineList) {
        out1.println(outputLine);
    }
    out1.flush();
    out1.close();
    fileWriter.close();
}

1 个答案:

答案 0 :(得分:4)

Scanner#nextLine是一种方法。您需要添加括号。取代

scan.nextLine;

scan.nextLine();
             ^

同样Scanner使用hasNextLine来检查后续行。在打开的文件上调用scan.nextLine()最终会导致NoSuchElementException。替换:

while ((inputLine = scan.nextLine()) != null) {
  ...
}

while (scan.hasNextLine()) {
   inputLine = scan.nextLine();
   lineList.add(inputLine);
}

请注意,第一次调用scan.nextLine()会导致第一行被占用而不会被写入已排序的输出文件。如果您打算将所有单词写入文件,请删除或注释此行。