【发布时间】:2023-03-25 08:23:01
【问题描述】:
在this stackoverflow.com response 中我看到了如何同时获得两者,而不是分别获得。
我想在 java 命令行中获取参数或标准输入重定向。
我是这样解决的:
public static void main(String[] args) {
String fileInput = "";
try {
if (System.in.available() > 0) {
InputStreamReader isr = new InputStreamReader(System.in);
int ch;
while((ch = isr.read()) != -1) {
//System.out.print((char)ch);
fileInput += (char)ch;
}
}
} catch(IOException e) {
e.printStackTrace();
}
if ( ((fileInput.length() > 0) && (args.length > 0)) ||
((fileInput.length() == 0) && (args.length != 1)) ||
((fileInput.length() == 0) && (args.length == 0))
) {
System.out.println("Use: myprogram \"string\"");
System.out.println("Use: myprogram < file");
System.exit(0);
}
但我有一个疑问。正如Oracle 10 help 所说:“返回一个估计可以从此输入流中读取(或跳过)的字节数,而不会被下一次调用此输入流的方法阻塞。下一次调用可能是同一个线程或另一个线程。单次读取或跳过这么多字节不会阻塞,但可能会读取或跳过更少的字节
请注意,虽然 InputStream 的某些实现会返回流中的总字节数,但很多不会。使用这个方法的返回值来分配一个缓冲区来保存这个流中的所有数据是不正确的。”。
我的问题是:方法 available() 总是会知道有一个标准重定向?有std重定向时总是返回> 0?
在我的测试中运行良好,但我不知道它是否在所有实现中都能正常运行。
【问题讨论】:
标签: java parameters stdin