Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何解决StreamTokenizer中的无输入问题_Java_Stream_Tokenize - Fatal编程技术网

Java 如何解决StreamTokenizer中的无输入问题

Java 如何解决StreamTokenizer中的无输入问题,java,stream,tokenize,Java,Stream,Tokenize,我有以下几行代码: public static void main(String[] args) { InputStreamReader inputStreamReader = new InputStreamReader(System.in); StreamTokenizer t = new StreamTokenizer(inputStreamReader); while (t.nextToken() != StreamTolenizer.TT_EOF) {

我有以下几行代码:

public static void main(String[] args) {
    InputStreamReader inputStreamReader = new InputStreamReader(System.in);
    StreamTokenizer t = new StreamTokenizer(inputStreamReader);
    while (t.nextToken() != StreamTolenizer.TT_EOF) {
        // process here
    }
}
因此,当我运行时,我调用:
java example.java

但是,当我调用:
java示例
时,我无法处理“没有输入文件”的情况


它似乎永远运行。

如果您不将任何内容重定向到stdin(System.in),例如示例命令行中的“input.txt”,那么您的程序将期望您在控制台窗口中键入数据

也许您应该重构您的程序,以使用命令行参数(例如,通过检查“
args.length>=1
”),并将其解释为要读取的文件名。如果未提供文件名,则可以打印错误消息。此外,您可以将特殊的伪文件名“
-
”(单个hypen)解释为stdin,这样您仍然可以重定向数据

例如:

publicstaticvoidmain(字符串[]args){
如果(args.length<1)抛出新的IllegalArgumentException(“未给出文件名”);
InputStream in=(“-”.equals(args[0])?System.in:新文件InputStream(args[0]);
InputStreamReader InputStreamReader=新的InputStreamReader(in);
StreamTokenizer t=新的StreamTokenizer(inputStreamReader);
while(t.nextToken()!=StreamTolenizer.TT_EOF){
// ...
但是,不要忘记关闭FileInputStream,例如在
finally
块中