读取cmd中传递的文件

时间:2014-11-22 23:23:22

标签: java cmd

我有一个问题,这可能很容易,但无法弄清楚。我正在编写一个名为task1的简单java程序来读取文件并计算一些值。我在这样的cmd中运行这个程序:

  

cmd:java task1计算

Word"计算"在" task1"之后是一个参数,它开始我的方法来计算一些值。但我想在一个名为values.txt的文件中计算一些值。我的问题是我不知道如何将我的代码写入该读取文件。此文件在cmd中作为参数传递,如:

  

cmd:java task1 calculate< values.txt

希望,你能理解我的问题。如果您能告诉我如何在我的文件中打印此值

,那将是非常棒的
        if(args.length == 0)
        {
            System.out.println("Insert some arguments");
        }
        else if(args[0].equals("calculate"))
        {
            //here i would like to read my file (values.txt) 
        }

感谢您的帮助,我很抱歉我的英语不好。

2 个答案:

答案 0 :(得分:2)

你应该使用缓冲读卡器。 当你这样做

cmd: java task1 calculate < values.txt

您将程序中values.txt的内容作为标准输入传递。

代码看起来像这样

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String line = bufferedReader.readLine();

这样你就可以用BufferedReader读取一行。

有关详情,请参阅http://alvinalexander.com/java/java-bufferedreader-readline-string-examples

PS:也可以直接从磁盘读取文件,无需将其传输到程序中。

你这样做:

BufferedReader bufferedReader = new BufferedReader(new FileReader(filename));

答案 1 :(得分:1)

您可以尝试Files#readAllLines()。这将读取文本文件并存储每一行 列表集合:

//Path valuesPath = Paths.get("VALUES_DIR", "values.txt");
Path valuesPath = Paths.get("./" + args[0]);

try {
  List<String> lines = Files.readAllLines(valuesPath, Charset.defaultCharset()));

  for (String line : lines) {     //print lines (or do whatever you need)
    System.out.println(line);
  }
} catch (IOException e) {
   e.printStackTrace();
}

其中args[0]是要读取的文件的名称(在task1.jar所在的同一目录下)。

将您的java程序称为:

java -jar task1.jar values.txt

编辑:

要将管道文件作为标准读取:

BufferedReader in = null;
try {
    in = new BufferedReader(new InputStreamReader(System.in));
    String line;
    while ((line = in.readLine()) != null) {  //print lines (or do whatever you need)
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
} 

将您的任务称为:

java task1 calculate < VALUES_PATH\values.txt

VALUES_PATH是文件所在的完整路径。

注意,当您使用<时,您无法在自己的程序中取回命令行。