【问题标题】:Reading in from System.in - Java [duplicate]从 System.in 读入-Java [重复]
【发布时间】:2011-07-26 04:12:55
【问题描述】:

我不确定您应该如何从 Java 文件的系统输入中读取数据。

我希望能够拨打java myProg < file

file 是我想要作为字符串读取并在 main 方法中提供给 myProg 的内容。

有什么建议吗?

【问题讨论】:

  • 到底是什么问题? 1)您不知道如何使用参数启动 java 程序 2)您不知道如何在 java 程序中打开文件,该文件将文件名作为 main 方法的参数。或 3) 两者都
  • @Fortega 这些都不是。他想用管道代替系统输入。
  • @Peter 有时阅读 6800 万页有点太多了!
  • 抱歉,没有看到您想从文件中读取google.co.uk/search?q=java+read+in+from+file+example 7.54 亿次点击。
  • Jarrod,这个问题是在您将其标记为...的副本之前四年写的。

标签: java input system.in


【解决方案1】:

您可以使用System.in 从标准输入中读取。它的工作原理就像从键盘输入一样。操作系统处理从文件到标准输入。

import java.util.Scanner;
class MyProg {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Printing the file passed in:");
        while(sc.hasNextLine()) System.out.println(sc.nextLine());
    }
}

【讨论】:

【解决方案2】:

好吧,您可以阅读System.in 本身,因为它是一个有效的InputStream。或者你也可以将它包裹在BufferedReader

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

【讨论】:

  • 包装在 BufferedReader 中似乎是个坏主意,因为在 Linux 上(可能不是在每个配置中)它会导致您的程序在您在终端/PuTTy 中键入内容并按“Enter”后无法获取数据。为了让程序获取您输入的内容,您需要发送一些特殊字符来刷新流。
【解决方案3】:

在 Java 中,控制台输入是通过读取 System.in 来完成的。获取基于字符的 附加到控制台的流,将 System.in 包装在 BufferedReader 对象中。 BufferedReader 支持缓冲输入流。它最常用的构造函数 显示在这里:

BufferedReader(Reader inputReader)

这里,inputReader 是链接到 BufferedReader 实例的流 创建的。 Reader 是一个抽象类。它的具体子类之一是 InputStreamReader, 它将字节转换为字符。

要获取链接到 System.in 的 InputStreamReader 对象,请使用以下构造函数:

InputStreamReader(InputStream inputStream)

因为System.in是指InputStream类型的对象,所以可以用于inputStream。 综上所述,以下代码行创建了一个连接的 BufferedReader 到键盘:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

此语句执行后,br 是一个基于字符的流,链接到控制台 通过 System.in.

这摘自本书Java- The Complete Reference by Herbert Schildt

【讨论】:

  • 很好的解释!
【解决方案4】:

使用 System.in,它是一个 InputStream,正好用于此目的

【讨论】:

    【解决方案5】:

    您将从System.in 读取,就像使用键盘输入(例如,InputStreamReaderScanner)一样。

    【讨论】:

      【解决方案6】:

      您可以拨打java myProg arg1 arg2 ...

      public static void main (String args[]) {
          BufferedReader in = new BufferedReader(new FileReader(args[0]));
      }
      

      【讨论】:

        【解决方案7】:

        您可能正在寻找类似的东西。

        FileInputStream in = new FileInputStream("inputFile.txt");
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        

        【讨论】:

        • 这是相当老的帖子了。确保您仔细评论了太多人看到的内容,因此,很可能许多专家已经检查过了。
        【解决方案8】:
        class myFileReaderThatStarts with arguments
        {
        
         class MissingArgumentException extends Exception{      
              MissingArgumentException(String s)
          {
             super(s);
          }
        
           }    
        public static void main(String[] args) throws MissingArgumentException
        {
        //You can test args array for value 
        if(args.length>0)
        {
            // do something with args[0]
        }
        else
        {
        // default in a path 
        // or 
           throw new MissingArgumentException("You need to start this program with a path");
        }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-08
          • 2011-08-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-10-12
          相关资源
          最近更新 更多