在java中通过命令行输入文本文件

时间:2016-11-26 19:58:07

标签: java file input command

我正在尝试编写一个程序,通过命令行输入文本文件,然后打印出文本文件中的单词数。我已经在这上花了大约5个小时。我正在使用java参加一个介绍课程。

这是我的代码:

stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
root_container.width = stage.fullScreenWidth;
root_container.height = stage.fullScreenHeight;

我尝试的每种方式都会遇到不同的错误,而且最一致的错误是#34;找不到符号"用于

中的文件参数
import java.util.*;
import java.io.*;
import java.nio.*;

public class WordCounter
{
    private static Scanner input;

    public static void main(String[] args)
    {
        if (0 < args.length) {
        String filename = args[0];
        File file = new File(filename);
        }

    openFile();
    readRecords();
    closeFile();
    }

    public static void openFile()
   {
      try
      {
         input = new Scanner(new File(file)); 
      } 
      catch (IOException ioException)
      {
         System.err.println("Cannot open file.");
         System.exit(1);
      } 
  }

    public static void readRecords()
   {
        int total = 0;
        while (input.hasNext()) // while there is more to read
            {
                total += 1;
            }
        System.out.printf("The total number of word without duplication is: %d", total);
     }

    public static void closeFile()
   {
      if (input != null)
         input.close();
   }    
}

我还不完全确定java.io和java.nio之间的区别是什么,所以我尝试使用两者中的对象。我确定这是一个我无法看到的明显问题。我在这里阅读了很多类似的帖子,这是我的一些代码来自的地方。

我之前已经编译了程序,但之后它在命令提示符下冻结。

2 个答案:

答案 0 :(得分:1)

您的代码几乎是正确的。你在while循环中指定了终止条件,如下所示,

while (input.hasNext()) //还有更多要阅读的内容

然而,由于您只是在不移动到下一个单词的情况下递增计数,因此计数只会通过始终计算第一个单词而增加。为了使它工作,只需将input.next()添加到循环中,以便在每次迭代中移动到下一个单词。

while (input.hasNext()) // while there is more to read
{
total += 1;
input.next();
}

答案 1 :(得分:1)

java.niojava.io的新增和改进版本。您可以使用其中任何一项。我在命令行中测试了以下代码,它似乎工作正常。在try块中解析了“找不到符号”错误消息。我认为你通过两次实例化一个名为File的{​​{1}}对象来混淆编译器。正如@dammina所回答的那样,您需要将file添加到while循环中,以便扫描程序继续下一个单词。

input.next();