java从控制台获取输入数据的几种方法
下面列举了java从控制台获取输入数据的4种方法,并且说明了适用的jdk版本及其注意事项,希望能够对你有所帮助
import java.io.BufferedReader;
import java.io.Console;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class ReadConsoleDataUtil {
/**
* 适用于所有jdk版本,直接从字节输入流读取数据
* 通过System.in.read()方法读取每一个字节保存在字节数组中,然后通过字节数组构造字符串
* System.in.read()是一个字节一个字节读取的,如果在控制台键入回车键enter返回的就是13和10
* @return
* @throws IOException
*/
public static String readFromInputStream() throws IOException {
int i = System.in.read();
List byteList = new ArrayList<>();
while (i!=-1 && i!=13 && i!=10) {
byteList.add((byte)i);
i = System.in.read();
}
byte[] byteArr = new byte[byteList.size()];
for (int j = 0; j < byteList.size(); j++) {
byteArr[j] = byteList.get(j);
}
return new String(byteArr);
}
/**
* 适用于所有jdk版本,通过字符流读取数据
* @return
* @throws IOException
*/
public static String readFromReader() throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String str = bufferedReader.readLine();
bufferedReader.close();
return str;
}
/**
* 适用于jdk1.5及其以上版本,通过文本扫描器读取数据
* @return
*/
public static String readFromScanner() {
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
scanner.close();
return str;
}
/**
* 适用于jdk1.6及其以上版本,通过console类读取数据
* 值得注意的是此方法只是在cmd命令窗口可以得到Console实例,在IDE工具下如eclipse下是得不到Console实例的
* @return
*/
public static String readFromConsole() {
Console console = System.console();
String result = "";
if (console == null) {
System.out.println("console is null");
} else {
result = console.readLine();
}
return result;
}
}