Проблема чтения ввода из Java System.in - PullRequest
2 голосов
/ 05 марта 2011

Я пытаюсь написать метод, который запрашивает ввод данных в командной строке и считывает их ввод как String из stdin и возвращает их. При первом вызове я все работаю правильноВсе вызовы getInput () впоследствии просто ничего не возвращают.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * Prompts the user for input and reads from standard input (stdin).
 * Note: Always check if the return is null!
 * 
 * @param description Describes the user input.
 * @return A String of the input, or null when failed.
 */
private String getInput(String description)
{       
    System.out.print(description + ": ");
    String input = null;

    InputStreamReader stream = null;
    BufferedReader reader = null;
    try {
        // Open a stream to stdin
        stream = new InputStreamReader(System.in);

        // Create a buffered reader to stdin
        reader = new BufferedReader(stream);

        // Try to read the string
        input = reader.readLine();

        // Exhaust remainder of buffer
        while (reader.skip(1) > 0) {
            // Do nothing
        }

    } catch (IOException e) {
        e.printStackTrace();
        // Error reading input

    } finally {
        // Clean up readers and streams
        try {
            if (reader != null) {
                reader.close();
            }
            if (stream != null) {
                stream.close();
            }
        } catch (IOException e) {
        }
    }

    System.out.print("\n");
    return input;
}

/**
 * Display the login prompt.
 */
private boolean promptLogin()
{       
    // prompt for user name and password
    String user = getInput("Enter username");
    String pass = getInput("Enter password");

    if (user == null || pass == null) {
        System.out.println("Invalid login information.");
        return false;
    }
    // ..
     }

1 Ответ

9 голосов
/ 05 марта 2011

Вы не должны закрывать стандартный поток ввода; по этой причине он работает только в первый раз

/**
 * Prompts the user for input and reads from standard input (stdin).
 * Note: Always check if the return is null!
 * 
 * @param description Describes the user input.
 * @return A String of the input, or null when failed.
 */
private String getInput(String description) {
    System.out.print(description + ": ");
    String input = null;

    InputStreamReader stream = null;
    BufferedReader reader = null;
    try {
        // Open a stream to stdin
        stream = new InputStreamReader(System.in);

        // Create a buffered reader to stdin
        reader = new BufferedReader(stream);

        // Try to read the string
        input = reader.readLine();           
    } catch (IOException e) {
        e.printStackTrace();
    } 

    return input;
}

/**
 * Display the login prompt.
 */
private boolean promptLogin() {
    // prompt for user name and password
    String user = getInput("Enter username");
    String pass = getInput("Enter password");

    if (user == null || pass == null) {
        System.out.println("Invalid login information.");
        return false;
    }

    return true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...