2011-03-30 79 views
32

我不确定你应该如何从Java文件的系统输入中读入。从System.in读入 - Java

我希望能够调用java myProg < file

如果文件是我想读入一个字符串,并在主要方法给MYPROG什么。

有什么建议吗?

+0

究竟是什么问题? 1)你不知道如何启动一个带有参数的java程序 2)你不知道如何在一个java程序中打开一个文件作为主要方法的参数。 或3) – Fortega 2011-03-30 15:02:05

+2

@Fortega都不是那些。他想要输入一个文件来代替系统输入。 – corsiKa 2011-03-30 15:04:13

+1

@Peter有时阅读6800万页有点太过分了! – corsiKa 2011-03-30 15:12:34

回答

50

您可以使用System.in从标准输入读取数据的InputStream。 IT就像从键盘输入一样。操作系统处理从文件到标准输入。 :-)

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()); 
    } 
} 
+0

不要忘记导入java.util.Scanner – shieldgenerator7 2017-08-15 16:48:18

+0

另外,Scanner的文档:https://docs.oracle .com/javase/7/docs/api/java/util/Scanner.html – shieldgenerator7 2017-08-15 16:48:31

4

使用System.in,它是只服务于这一目的

16

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

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

在BufferedReader中换行似乎是一个糟糕的主意,因为在Linux上(可能不是在每个配置中),它会导致程序在键入内容后无法获取数据在终端/ PuTTy中按“Enter”。为了让程序得到你输入的内容,你需要发送一些特殊字符来刷新流。 – 2015-01-31 19:23:24

1

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

public static void main (String args[]) { 
    BufferedReader in = new BufferedReader(new FileReader(args[0])); 
} 
-5
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"); 
} 
} 
-4

你可能寻找这样的事情。

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

这是相当老的帖子。确保你仔细评论了很多人看到的东西,因此很可能很多专家已经检查过它。 – smttsp 2014-06-22 19:12:37

3

在Java中,控制台输入由从阅读System.in完成。为了获得附加到控制台基于字符 流,包System.in的BufferedReader对象。 BufferedReader支持缓冲输入流。其最常用的构造 如下所示:

BufferedReader(Reader inputReader) 

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

为了获得链接到System.in一个InputStreamReader的对象,使用下面的构造:

InputStreamReader(InputStream inputStream) 

由于系统。是指的对象InputStream,它可以用于inputStream。 全部放在一起,下面的代码行创建一个的BufferedReader连接 键盘:

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

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

这是从书Java- The Complete Reference by Herbert Schildt