【问题标题】:Input Redirection to keyboard input输入重定向到键盘输入
【发布时间】:2015-05-15 21:15:50
【问题描述】:

我有一个使用输入重定向的程序,并且在某些时候我想开始从键盘提供输入。我将如何重新重定向输入?

我运行程序如下

java SomeClass < data.txt

代码看起来像这样

java.util.Scanner  = new java.util.Scanner(System.in);
//Process the data from data.txt
//Here I want to be able to receive input from the keyboard, but input still only looks for input from data.txt

有什么方法可以让我再次使用上述方法从键盘接收输入,或者,还有哪些其他选项可以接收来自两个不同来源的输入?

附:我正在使用 Windows。

【问题讨论】:

  • 一定要使用io-redirection吗?将文件名作为命令行参数传递并在代码中读取文件怎么样?
  • @copeg 我正要这样做,但出于好奇,我问了这个问题。

标签: java io-redirection


【解决方案1】:

在 Unix(包括 OS X)上,您应该能够使用 cat 命令将来自两个或多个源的输入按顺序组合到一个流中。然后,您可以将其通过管道传输到您的程序中:

cat data.txt - | java SomeClass

- 裸参数表示标准输入,它在交互式 shell 会话中连接到键盘。

【讨论】:

  • 我用的是windows,有什么建议吗?
  • Windows 没有提供类似cat 的东西。有type,类似,但它不能满足您的需求。可能 Powershell 有办法做到这一点,但我不会立即打开任何东西。我想也许您可以创建一个命名管道,将其输入重定向到java,然后将data.txtCON 复制到其中。更多 Windows 用户可能会有更好的建议。
【解决方案2】:

拥有许多输入并在需要时使用它们怎么样?

Scanner keyboardScanner = new Scanner(System.in);
Scanner fileScanner = new Scanner("data.txt");
    //Process the data from data.txt
    fileScanner.nextLine();
    //Here I want to be able to receive input from the keyboard, but input still only looks for input 
    keyboardScanner.nextLine();

【讨论】:

  • 当然,如果您希望程序 依赖 输入的这种排列,或者如果您想给它提供支持的选项。 I/O 重定向方法的要点是程序不必内置任何内容。但话虽如此,是的,它可以工作。
  • 好。在命令行中提供文件名怎么样?类似于 >app1 -input1 data.txt -input2 dat.file
  • 是的,正如我所说,Java 程序也可以接受您可以配置此类行为的选项。这比硬接线更灵活,但不如完全不用担心。
猜你喜欢
  • 1970-01-01
  • 2014-07-21
  • 1970-01-01
  • 2010-10-31
  • 1970-01-01
  • 2021-12-24
  • 2014-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多