从同一程序中的String [] args和标准输入中获取输入是否合法?

时间:2015-11-10 20:30:51

标签: java

据我了解,这不合法,因为程序一次只能采用两种形式的参数输入中的一种。但是,我并不是100%肯定我的答案,所以如果有人能够澄清,那将非常感激。

2 个答案:

答案 0 :(得分:0)

是的,这是合法的。命令行参数与从标准输入读取的字符无关。

例如,这段代码非常合适:

public class Example {
    public static void main(String[] args) {
        System.out.println("Printing command line arguments: ");
        for(String s: args) {
            System.out.println(s);
        }
        System.out.println("Printing from standard in: ");
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()) {
            System.out.println(sc.next());
        }
        sc.close();
    }
}

答案 1 :(得分:0)

没问题。每个正在运行的程序(在Windows和基于Unix / Linux的操作系统中)都具有:

  • “当前”工作目录
  • 开头的论据
  • 环境变量(通常从父进程继承)
  • 输入流
  • 输出流
  • 错误流

它可以自行决定使用它们(有明显的限制,例如无法修改参数或写入输入流)。

Servlet及其处理请求相比,可能会出现一些混淆 - 请求可以作为字节数组读取,作为流或通过某种框架将其转换为对象模型或映射它参数。然而,这种情况是不同的,因为HTTP请求确实只包含一个数据流(为简单起见,我省略了标题),因此您必须选择使用哪种方法,并且不能同时使用这两种方法。

纯Java进程及其main()方法的情况不同,因为参数和输入流是不同的数据片段,而不仅仅是查看相同数据的不同方式。