缓冲读卡器中的异常

时间:2013-08-22 16:29:15

标签: java exception bufferedreader string

我试图在一个非常简单的代码中使用bufferedreader从控制台读取

System.out.println("Enter a port number : ");

    BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));
    String s = bufferRead.readLine();
        int port = Integer.parseInt(s);

当打印消息时,它不会给我任何时间在控制台中写入它直接显示Java.lang.NumberFormat异常,因为我没有输入任何内容。 对可能出错的任何建议?

6 个答案:

答案 0 :(得分:1)

使用Console.readLine从控制台读取输入。您可以使用System.console获取Console的实例。

示例:

String s = System.console().readLine("Enter a port number: ");
int port = Integer.parseInt(s);

如果System.console()返回null,则表示(从JVM的角度来看)您实际上没有控制台。如果您的标准输入已被重定向,则可能会发生这种情况。

答案 1 :(得分:0)

String input = bufferRead.readLine();

if(input != null && !input.isEmpty()) {
    int port = Integer.parseInt(input);
} else {
    // Handle end of stream
}

Reference用于 readLine 方法。

您可以使用Scanner。你可以做 -

Scanner sc = new Scanner(System.in);
int i = sc.nextInt();

<强>更新

根据您的评论,这是整个班级 -

import java.io.*;

public class SOTest1{

    public static void main(String args[]) throws IOException {

        System.out.println("Enter a port number : ");

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

        String input = bufferRead.readLine();

        if(isNumber(input)){
            int port = Integer.parseInt(input);
            System.out.println("entered port :: " + port);    
        } else {
            System.out.println("entered port is not a number :: " + input);
        }            

    }

    public static boolean isNumber(final String str) {

       if(str == null || str.isEmpty()){
           return false;
       }

        int size = str.length();

        for (int i = 0; i < size; i++) {
            if (!Character.isDigit(str.charAt(i))) {
                return false;
            }
        }

        return true;
    }

}

答案 2 :(得分:0)

我不明白你为什么要面对这个问题。我在Eclipse IDE和windows命令提示符下执行了你的代码,两者似乎都运行正常。 因此,作为一个独立的代码,它工作正常,但如果你间歇性地面对问题,那么可能是由于输入流中已经存在一些未读的字符,因此不允许您输入{{1}所需的更多数据} 方法。 作为清理,我建议打电话

read()

在致电System.in.skip(System.in.available()); 之前。

答案 3 :(得分:0)

它的工作非常好。但是我添加了一些检查和一些try-catch块。

  public static void main(String[] args)
  {
    System.out.println("Enter a port number: ");

    BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));
    String s = null;
    Integer i = null;
    try
    {
      s = bufferRead.readLine();
      System.out.println("INPUT: " + s);

    }
    catch (IOException e)
    {
      System.out.println(e);
    }

    if (s == null)
      return;

    try
    {
      i = Integer.parseInt(s);
    }
    catch (NumberFormatException e)
    {
      System.out.println(e);
      return;
    }
    System.out.println("PORT: " + i);
  }

答案 4 :(得分:0)

你是如何运行这段代码的? 我在eclipse上尝试过,它对我来说很好用

public static void main(String args[]) throws IOException {
    System.out.println("Enter a port number : ");

    BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));
    String s = bufferRead.readLine();
        int port = Integer.parseInt(s);
    System.out.println("entered port :: " + port);    
}

这是输出

Enter a port number : 
56
entered port :: 56

答案 5 :(得分:0)

如果您在Eclipse中运行它,请检查您的运行配置。在常用选项卡上,有标准输入和输出部分。检查“分配控制台(输入所需)”。