第一个输入/输出
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
// System.in和System.out方法
//缺点一: 该方法能获取从键盘输入的字符,但只能针对一个字符的获取
//缺点二: 获取的只是char类型的。如果想获得int,float等类型的输入,比较麻烦。
public static void CharTest(){
try{
System.out.print("Enter a Char:");
char i = (char)System.in.read();
System.out.println("Yout Enter Char is:" + i);
}
catch(IOException e){
e.printStackTrace();
}
}
是属于java.lang包的类,代表系统类
定义如下:
public final class System extends Object//此类为最终类,不能被继承。
它有以下两个重要的成员变量:
(1)in:是输入流对象。 它的来源是键盘。 它可以读取用户从键盘输入的数据。 读取数据时,会造成拥塞,直到用户按下回车键。 阅读方法:
public int read(char c[],int off,int len)和public int read(char c[])。
(2)out:是一个输出流对象,其目的地是命令行窗口,写法:
public void write(char c[],int off,int len)和public void write(char c[])
in 和 out 是类的属性:
(1)final in //静态方法,直接用类名调用,返回的是类,表示可以实例化。 .in是类型,字节流,程序可以用它来读取键盘输入的数据。 “标准”输入流。 该流已打开并准备好提供输入数据。 通常,该流对应于键盘输入或主机环境或用户指定的另一个输入源。
(2)final out //静态方法,直接用类名调用,返回的是类,也就是说可以实例化。 .out是类型(是子类),字节流,程序可以用它来输出数据到显示器上。 “标准”输出流。 该流已打开并准备好接受输出数据。 通常,该流对应于监视器输出或主机环境或用户指定的另一个输出目的地。
其实JAVA也对IO提供了一定的支持。 .in、.out、.err这三个流也是常见的数据源和数据流目的地。 最常用的方法可能是在控制台程序中使用 .out 将输出打印到控制台。 这三个流是在 JVM 启动时由 Java 运行时初始化的,因此您不需要初始化它们(尽管您可以在运行时替换它们)。
第二次更换系统流程
虽然.in和.out这两个流是java.lang的静态成员。 class(这两个变量是final常量)并且在JVM启动时已经提前初始化了,你仍然可以改变它们。
只需对 .in 进行新设置或对 .out 进行新设置,所有后续数据都将在新流中读取和写入。
可以使用.setIn()、.()方法设置一个新的系统流(这两个方法是静态方法,内部调用本地方法来重置系统流)。 记住,一定要在JVM关闭之前刷新.out(调用flush()),以确保.out将数据输出到文件中。
// InputStreamReader和BufferedReader方法
// 优点: 可以获取键盘输入的字符串
// 缺点: 如何要获取的是int,float等类型的仍然需要转换
public static void ReadTest(){
System.out.println("ReadTest, Please Enter Data:");
InputStreamReader is = new InputStreamReader(System.in); //new构造InputStreamReader对象
BufferedReader br = new BufferedReader(is); //拿构造的方法传到BufferedReader中,此时获取到的就是整个缓存流
try{ //该方法中有个IOExcepiton需要捕获
String name = br.readLine();
System.out.println("ReadTest Output:" + name);
}
catch(IOException e){
e.printStackTrace();
}
}
:是字节流和字符流之间的桥梁。 它可以将字节流输出为字符流,并且可以为字节流指定字符集。 如果不指定,将使用底层操作系统的默认编码方法。 可以一一输出。 封装在内部的字符以一种更高级别的方式一次读取一个字符。
:比高效读取字符、数组、行更高级。
java.io下有两个抽象类: 和 ,分别代表字节流和字符流。 它们是表示字节输入流的所有类的超类。 它们提供字节流的读取而不是文本读取。 ,这是与类的根本区别。
是一个用于读取字符流的抽象类。 通常每个读取请求都会导致对底层字符或字节流的相应读取请求。 如果没有缓冲,每次调用 read() 或 () 都会导致从文件中读取字节,将它们转换为字符并返回它们,效率极低。 即读出的是char数组,或者读出的是byte数组。
那为什么他们需要互相合作呢? 因为是字节输出(汉字会被分成两个字节),但是它的“包装”(整行读取),效率更高,所以最好一起使用。 流缓存可以以流的形式进行,然后通过方法获取缓存的内容。
第三种
//Scanner类中的方法
//优点一: 可以获取键盘输入的字符串
//优点二: 有现成的获取int,float等类型数据,非常强大,也非常方便;
public static void ScannerTest(){
Scanner sc = new Scanner(System.in);
System.out.println("ScannerTest, Please Enter Name:");
String name = sc.nextLine(); //读取字符串型输入
System.out.println("ScannerTest, Please Enter Age:");
int age = sc.nextInt(); //读取整型输入
System.out.println("ScannerTest, Please Enter Salary:");
float salary = sc.nextFloat(); //读取float型输入
System.out.println("Your Information is as below:");
System.out.println("Name:" + name +"\n" + "Age:"+age + "\n"+"Salary:"+salary);
}
它是Java5的新特性,主要功能是简化文本扫描。 “扫描仪”的中文意思是从一个地方扫描一份数据,然后在另一个地方显示出来。 一个简单的文本扫描器,可以使用正则表达式解析基本类型和字符串。
使用分隔符模式将其输入分解为标记,默认情况下匹配空格。 然后可以使用不同的 next 方法将生成的令牌转换为不同类型的值。 通过new(.in)创建时,控制台会等待输入,直到按下回车键,然后将输入的内容作为扫描对象传递。 并且该类有一个假设,它将在输入结束时抛出,该类将吞掉这个异常。
有人常说,之所以使用它,是因为它好用。 不如说构造函数支持多种方法,构造的对象也很方便。 你可以直接从字符串()、输入流、文件等构造对象。一旦拥有它们,你就可以逐段扫描整个文本(根据常规分隔符)并对扫描结果进行所需的处理。
就像带有光标或指针的扫描仪一样,调用它的 () 就像向前探索光标直到遇到换行符。 如果过程中遇到字符串对象,则返回 true 并重置光标。 调用它的()方法实际上意味着光标向前探索,直到遇到换行符。 此时并不重置,而是光标直接定位到目标数据的下一行,并返回探索过程中检测到的数据,包括空格。
java中常用的next()和()方法的区别
下一个():
1. 必须读取有效字符后才能完成输入。
2. next()方法会自动去除输入有效字符之前遇到的空格。
3. 只有输入有效字符后,其后输入的空格才会用作分隔符或终止符。
next() 无法获取带空格的字符串。
():
1、以Enter作为结束字符,也就是说()方法返回输入回车之前的所有字符。
2.可以获得空白空间。 java.io.;