• 【Java 基础篇】Java标准输入流详解:读取用户输入的完整指南


    在这里插入图片描述

    Java是一门流行的编程语言,常用于开发各种类型的应用程序,包括控制台应用、桌面应用、Web应用等。在这些应用中,与用户进行交互是一项重要的任务。本文将重点介绍Java标准输入流,它是Java程序中用于从用户获取输入的关键组成部分。

    什么是标准输入流?

    在Java中,标准输入流通常称为System.in,它是一个InputStream对象,用于从标准输入设备(通常是键盘)读取数据。标准输入流允许Java程序与用户进行交互,接收用户输入的文本或其他数据。

    如何使用标准输入流?

    使用Java标准输入流非常简单。你可以使用System.in对象与其他输入流对象一样,来读取用户的输入数据。以下是一些常见的标准输入流的用法示例:

    1. 读取文本输入

    要读取用户输入的文本,你可以使用Scanner类。这个类提供了一些便捷的方法来处理文本输入。下面是一个示例:

    import java.util.Scanner;
    
    public class UserInputExample {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            System.out.print("请输入你的名字:");
            String name = scanner.nextLine();
            System.out.println("你好," + name + "!");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这个示例中,我们创建了一个Scanner对象,然后使用nextLine()方法来读取用户输入的一行文本。

    2. 读取数值输入

    如果需要读取数值输入,可以使用Scanner类的其他方法,如nextInt()nextDouble()。以下是一个读取整数的示例:

    import java.util.Scanner;
    
    public class NumberInputExample {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            System.out.print("请输入一个整数:");
            int number = scanner.nextInt();
            System.out.println("你输入的数字是:" + number);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    这个示例演示了如何使用nextInt()方法来读取用户输入的整数。

    3. 读取字符输入

    如果只需要读取单个字符,可以使用System.inread()方法。以下是一个示例:

    import java.io.IOException;
    
    public class CharInputExample {
        public static void main(String[] args) throws IOException {
            System.out.print("请输入一个字符:");
            int input = System.in.read();
            char character = (char) input;
            System.out.println("你输入的字符是:" + character);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    这个示例使用了System.in.read()方法来读取用户输入的字符。需要注意的是,read()方法返回的是整数,需要进行类型转换为字符。

    处理输入异常

    在处理用户输入时,应该考虑到可能出现的异常情况。用户可能会输入无效的数据,或者在程序预期之外终止输入。以下是一些处理输入异常的方法:

    使用try-catch

    你可以使用try-catch块来捕获可能发生的异常。例如,使用InputMismatchException来处理不匹配的输入:

    import java.util.InputMismatchException;
    import java.util.Scanner;
    
    public class ExceptionHandlingExample {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            try {
                System.out.print("请输入一个整数:");
                int number = scanner.nextInt();
                System.out.println("你输入的数字是:" + number);
            } catch (InputMismatchException e) {
                System.out.println("输入不匹配,请输入一个整数。");
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    使用循环

    你还可以使用循环来确保用户提供有效的输入。如果用户提供的输入无效,可以提示用户重新输入,直到得到有效的输入。

    import java.util.InputMismatchException;
    import java.util.Scanner;
    
    public class InputValidationExample {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int number = 0;
            boolean validInput = false;
            
            while (!validInput) {
                try {
                    System.out.print("请输入一个整数:");
                    number = scanner.nextInt();
                    validInput = true;
                } catch (InputMismatchException e) {
                    System.out.println("输入不匹配,请输入一个整数。");
                    scanner.next(); // 清除无效输入
                }
            }
            
            System.out.println("你输入的数字是:" + number);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    这个示例中,如果用户输入无效的整数,程序会提示用户重新输入,直到提供有效的输入。

    标准输入流的更多用法

    当涉及到 Java 标准输入流时,还有许多用法和技巧可以帮助你更好地处理用户的输入。下面是一些更多用法的示例:

    1. 读取密码

    有时你可能需要读取用户的密码,但不希望密码明文显示在控制台上。你可以使用 java.io.Console 类来实现这一点:

    import java.io.Console;
    
    public class PasswordInputExample {
        public static void main(String[] args) {
            Console console = System.console();
            if (console == null) {
                System.out.println("控制台不可用,请在命令行中运行此程序。");
                System.exit(1);
            }
    
            char[] password = console.readPassword("请输入密码:");
            // 从 password 数组中获取密码并进行处理
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    console.readPassword() 方法会将用户输入的密码作为字符数组返回,而不会在控制台上显示明文密码。

    2. 读取多行文本

    如果需要读取多行文本输入,你可以使用 BufferedReader 来读取每一行:

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class MultiLineInputExample {
        public static void main(String[] args) throws IOException {
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("请输入多行文本 (输入\"exit\"结束):");
    
            String line;
            while ((line = reader.readLine()) != null) {
                if ("exit".equalsIgnoreCase(line)) {
                    break;
                }
                System.out.println("你输入的内容是:" + line);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    这个示例使用 BufferedReader 来逐行读取用户的输入,直到用户输入 “exit” 为止。

    3. 使用 Java 8 特性

    如果你使用 Java 8 或更高版本,你可以使用 Scanner 类的新方法来简化输入处理,如 nextInt()nextLine()

    import java.util.Scanner;
    
    public class Java8InputExample {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            System.out.print("请输入一个整数:");
            int number = scanner.nextInt();
            scanner.nextLine(); // 清除换行符
            System.out.print("请输入一行文本:");
            String text = scanner.nextLine();
    
            System.out.println("你输入的整数是:" + number);
            System.out.println("你输入的文本是:" + text);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    Java 8 引入了一些新方法来更轻松地处理输入。

    4. 使用输入文件

    有时你可能想从文件而不是标准输入读取数据。你可以使用 FileInputStreamFileReader 来从文件中读取数据。以下是一个示例:

    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class FileInputExample {
        public static void main(String[] args) throws IOException {
            String fileName = "input.txt"; // 输入文件名
            try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
                String line;
                while ((line = reader.readLine()) != null) {
                    System.out.println("文件内容:" + line);
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    这个示例展示了如何从文件中读取文本数据。

    这些是一些 Java 标准输入流的更多用法,可以根据你的需求选择适合的方法来处理用户的输入。希望这些示例能帮助你更好地处理用户输入并提升你的 Java 编程技能。

    注意事项

    当使用 Java 标准输入流时,有一些注意事项需要考虑,以确保程序的可靠性和用户友好性:

    1. 异常处理:标准输入流的读取和处理可能会引发异常,例如 IOException。因此,在读取或处理标准输入时,应该始终进行异常处理,以处理潜在的异常情况,例如输入不可用或读取错误。

      try {
          BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
          String input = reader.readLine();
          // 处理输入
      } catch (IOException e) {
          e.printStackTrace();
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    2. 输入验证:在接受用户输入之前,应该进行输入验证,以确保输入符合预期的格式和范围。这可以防止无效或恶意输入对程序的影响。

    3. 异常输入处理:用户可能会提供不符合预期的输入。你的程序应该能够处理这些异常情况,例如当用户提供非数字输入而你的程序期望数字时。

    4. 关闭输入流:如果你创建了一个输入流(如 BufferedReaderScanner),在使用完毕后应该关闭它,以释放资源。可以使用 try-with-resources 来确保在使用完毕后自动关闭流。

      try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
          String input = reader.readLine();
          // 处理输入
      } catch (IOException e) {
          e.printStackTrace();
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    5. 错误处理和用户提示:当用户提供无效输入或程序发生错误时,应该向用户提供友好的错误消息,以帮助他们理解问题并提供解决方案。

    6. 不可信任的输入:永远不要信任用户的输入。始终假定输入可能不安全,并采取适当的措施来防止潜在的安全漏洞,例如 SQL 注入或路径遍历攻击。

    7. 文本编码:在处理用户输入时,要确保正确处理字符编码。不同的操作系统和输入源可能使用不同的字符编码,因此要谨慎处理字符编码以避免乱码或数据损坏。

    8. EOF(文件结束符)处理:在读取标准输入时,要注意处理文件结束符(EOF)。EOF 表示输入的结束,可以使用相应的方法来检测它,以退出输入循环。

    9. 用户友好性:在处理标准输入时,考虑用户友好性。提供清晰的提示和说明,以帮助用户提供正确的输入。此外,考虑提供帮助文档或指南,以指导用户使用程序。

    10. 测试和验证:在编写代码之前,进行充分的测试和验证,以确保标准输入的处理符合预期,并且程序在各种输入情况下都能正确运行。

    遵循这些注意事项将有助于编写可靠、安全和用户友好的标准输入处理代码。

    结语

    Java标准输入流是处理用户输入的重要工具,它可以轻松地与用户进行交互并接收各种类型的输入。通过合理处理可能的异常情况,你可以编写健壮的程序,能够处理各种用户输入。

    希望本文能够帮助你更好地理解和使用Java标准输入流,从而提升你的Java编程技能。如果你想进一步深入学习Java的输入和输出操作,还可以研究Java的文件操作、网络通信等更高级的主题。愿你在Java编程的道路上越走越远!

  • 相关阅读:
    Buran勒索病毒通过Microsoft Excel Web查询文件进行传播
    一种适用于FDD+TDD基站天线阵列的多天线共存方式
    如何用 Spring Security 集成 CAS 认证 (二)
    RCU Library
    从0开始写中国象棋-创建棋盘与棋子
    23软考备考已开始,网络工程师知识点速记~(3)
    Vue组件template标签波浪线报错
    OpenCV C++ 图像 批处理 (批量调整尺寸、批量重命名)
    xPortPendSVHandler任务切换流程
    PAT 1028 List Sorting
  • 原文地址:https://blog.csdn.net/qq_21484461/article/details/133000850