Java SESystem.in标准输入流
CAMELLIA!!! note 目录
System.in标准输入流
在Java编程语言中,System.in
是一个标准输入流,通常用于从控制台读取用户输入。
它是java.lang.System
类的一个静态字段,并且是一个InputStream
对象。
一、基本概念
- 类型:
System.in
是一个InputStream
对象。
- 用途:主要用于读取用户从键盘输入的数据。
- 默认行为:通过控制台读取输入流,直到遇到输入的结束标志(通常是Enter键)。
二、使用方式
- 由于
System.in
是一个InputStream
,它只能读取字节数据。因此,为了方便读取文本数据,通常会将System.in
包装在更高级的流中,如BufferedReader
或Scanner
。
- 标准输入流
System.in
不需要显式关闭。这是因为 System.in
是一个全局的、由 JVM 管理的输入流。手动关闭它可能会导致程序的其他部分无法再读取输入,从而引发意外行为或错误。
三、示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| package com.camellia.io.StandardInputStream;
import org.junit.jupiter.api.Test;
import java.io.*;
public class SystemInTest {
@Test public void testSystemIn01() { try (InputStream in = System.in) { byte[] bytes = new byte[1024]; int readCount = in.read(bytes); for (int i = 0; i < readCount; i++) { System.out.println(bytes[i]); } } catch (IOException e) { e.printStackTrace(); } }
@Test public void testSystemIn02() throws FileNotFoundException { InputStream originalSystemIn = System.in; System.setIn(new FileInputStream("src/document/滕王阁序.txt"));
try (InputStream in = System.in) { byte[] bytes = new byte[1024]; int readCount; while ((readCount = in.read(bytes)) != -1) { System.out.print(new String(bytes, 0, readCount)); } } catch (IOException e) { e.printStackTrace(); } finally { System.setIn(originalSystemIn); } }
@Test public void testSystemIn03() { try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { String s; while ((s = br.readLine()) != null) { if ("exit".equals(s)) { break; } System.out.println("您输入了:" + s); } } catch (IOException e) { e.printStackTrace(); } } }
|