一、Scanner输入流 (输入效率较慢)

java的输入需要通过对象获取输入内容,使用java.util包中的Scanner类。
1、输入

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		//Scanner为字节输出流
		Scanner s = new Scanner(System.in);
		int n = s.nextInt();			//输入int型数据
		char c = s.next().charAt(0);	//输入char型数据
		String str1 = s.next();			//输入string型数据
		String str2 = s.nextLine();		//输入string型数据
		//next()只能得到不带空格的字符串,空格 tab 回车都是结束符
		//nextLine()可以接收空格,也可以用nextLine来吸收回车,只有回车能结束
		//输入后要用s.close将其关闭,否则会报错。
	}
}

2、其他常用方法
Scanner类主要用于输入,但也有一些其他的常用方法。

hasNextLine()	//判断当前是否有输入,常用在判断循环是否执行上

		hasNextInt()	//判断当前输入是否为整数类型

		hasNextDouble()	//判断当前输入是否为Double类型

		//判断文件结束
		while(sc.hasNext()) {
			int n = sc.nextInt();
			System.out.println(n);
		}
		//当执行到hasNext()时,它会先扫描缓冲区中是否有字符,有则返回true,继续扫描。
		//直到扫描为空,这时并不返回false,而是将方法阻塞,等待你输入内容然后继续扫描,并不会结束。
		// 匹配#返回true,然后取非运算。输入#时结束输入
		while(!sc.hasNext("#")) 
        {
            System.out.println("输入的内容是:"+ sc.next());
        }
二、BufferedReader缓冲输入流

BufferedReader提供了一种字符流的缓冲区数据读取,利用此类进行数据读取时会将读取到的数据暂时保存在缓冲区中,然后利用其内部的方法将读取到的数据一次性取出。大大提高了输入的效率。BufferedReader会读入空格,回车键结束。但在输入数组时很不方便。
1、readLine()输入
读取一整行的数据,回车结束。

public class Main {
	public static void main(String[] args) throws IOException {
		//BufferedReader为字符流
		//System.in为字节流,InputStreamReader将字节流转化为字符流
		BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
		//接收输入信息   readLine 一次性将缓冲区中的内容都取出来
		String str = buf.readLine(); 
		String s[] = str.split(" ");	//将str的内容用空格分隔
		int n = Integer.parseInt(str);   //整数
		char c = str.charAt(0);		//字符
		//将字符串型 转换为int型数据
		System.out.println(n);
	}
}

2、read()输入
返回输入字符的ascii码

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

public class Main {
		public static void main(String[] args) throws IOException {
			//BufferedReader为字符流
			BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
			//read()返回输入的第一个字符的ascii码
			int n = buf.read();
			System.out.println(n);

		}	
}
三、StreamTokenizer输入流

StreamTokenizer只能接收数字或字母,如果输入除空格和回车以外的字符(如:!@#$%^&*()[]{})无法识别,会显示null。
StreamTokenizer 类获取输入流并将其分析为“标记”,允许一次读取一个标记。
StreamTokenizer可以获取输入流并根据空格和回车分割成Token(标记),用nextToken方法读取下一个标记。
如果标记是字符串,用st.sval获取标记,如果是数字用sc.nval获取标记,sc.navl是double类型。

public class Main {
		public static void main(String[] args) throws IOException {
			StreamTokenizer sc =new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
			//判断文件结束
			while(sc.nextToken() != StreamTokenizer.TT_EOF) {
				String str = sc.sval;
				System.out.println(str);
			}	
		}
}
四、System输出流
1、System.out.println();
//是最常用的输出语句,快捷输入方式:输入syso后按alt+/键。
//另外它会把括号里的内容转换成字符串输出到输出窗口。
//当输出的是一个基本数据类型时,会自动转换成字符串。如果输出的是一个对象,会自动调用对象的toString();

2、System.out.print();
//print()输出后不会换行,而println输出后自动换行。

3、System.out.printf();
//这个方法延续了C语言的输出方式,通过格式化文本和参数列表输出。
五、BufferedWriter输出流

将文本写入字符输出流,缓冲各个字符从而提供单个字符,数组和字符串的高效写入。通过write()方法可以将获取到的字符输出,然后通过newLine()进行换行操作。BufferedWriter中的字符流必须通过调用flush方法才能将其刷出去。并且BufferedWriter只能对字符流进行操作。如果要对字节流操作,则使用BufferedInputStream。

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;

public class Hello {
	public static void main(String[] args) throws IOException {
		BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
		for(int i = 0; i < 10; i++) {
			writer.write('e');
		}
		//一定要加flush()不然没有输出内容
		writer.flush();
	}
}
六、PrintWriter输出流

PrintWriter:向文本输出流打印对象的格式化表示形式(Prints formatted representations of objects to a text-output stream)。PrintWriter不但能接收字符流,也能接收字节流。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;

public class Main {
		public static void main(String[] args) throws IOException {
			StreamTokenizer sc = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
			sc.nextToken();
			int n = (int)sc.nval;
			// 1、先通过print()或println()方法把需要输出的内容放入缓冲区
			// 2、然后通过flush()将缓冲区的内容输出到控制台
			PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
			out.print(n);
			//记得刷新
			out.flush();
			//print()    不换行输出,只是把需要的内容放入缓冲
			//println()  换行输出
			//printf() 	 与c语言相同
			//flush()    刷新缓冲区,把缓冲区的内容输出到控制台
		}
}