java - StreamTokenizer无输入怎么解决

标签 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) {
        // process here
    }
}

因此,当我运行时,我调用:java example.java < input.txt

但是,当我调用:java example时,我无法处理“无输入文件”的情况。 .

它似乎永远运行。

最佳答案

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

也许您应该重构您的程序以期待命令行参数(例如,通过检查“args.length >= 1”)并将其解释为要读取的文件的名称。如果没有给出文件名,那么您可以打印一条错误消息。此外,您可以将特殊的伪文件名“-”(单个连字符)解释为标准输入,这样您仍然可以重定向数据。

例如:

public static void main(String[] args) {
  if (args.length < 1) throw new IllegalArgumentException("no filename given");
  InputStream in = ("-".equals(args[0])) ? System.in : new FileInputStream(args[0]);
  InputStreamReader inputStreamReader = new InputStreamReader(in);
  StreamTokenizer t = new StreamTokenizer(inputStreamReader);   
  while(t.nextToken() != StreamTolenizer.TT_EOF) {
    // ...

但是,不要忘记关闭 FileInputStream,例如在 finally block 中。

关于java - StreamTokenizer无输入怎么解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9696691/

相关文章:

c - 标记化缓冲区段错误

java - 如何将三种具有不同参数类型的相似方法合并为一个通用方法?

java - Spring Actuator/health 对 JSON 的 XML 响应

java - Java 类 Integer 和 Long 的源代码中的 "HD"是什么意思?

java - 如何在不关闭线程的情况下中断被某些套接字 IO 操作阻塞的线程

c# - Android 到 PC/PC 到 android 蓝牙/wifi 实时音频流

java - 如何解决相互身份验证的 TLSv1 握手问题?

java - 当套接字关闭时,与套接字关联的流是否会自动关闭?

python - 在python中对多个单词进行分词

python - 情感分析 Python 标记化