输入输出
(一)读取输入
前面我们使用过很多“标准输出流”,System.out.println();要想使用“标准输入流”,首先要构造一个Scanner对象,并与“标准输入流”System.in关联。接着使用in.nextXXX()方法读取输入即可。
Scanner in = new Scanner(System.in);
运行示例,读取控制台输入的姓名,年龄,薪资:
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("What's your name?");
String name = in.nextLine();
System.out.println("How old are you?");
int age = in.nextInt();
System.out.println("How many salary do you have?");
double salary = in.nextDouble();
System.out.println("His name is "+name+",his age is "+age+",his salar"
+ "y is "+salary+".");
}
}
因为Scanner类在控制台输入是可见的,所以不适用于读取密码,Java6以后,引入Console类来实现读取密码。
package CoreJava;
import java.io.Console;
public class ConsoleTest {
public static void main(String[] args) {
Console con = System.console();
if(con!=null) {
String name = con.readLine("Username:");
char[] password = con.readPassword("Password:");
con.printf("Username is: " + name + "\n");
con.printf("Password is: " + password + "\n");
}else {
System.out.println("Console is unavailable");
}
}
}
以上代码不能在eclipse等IDE中使用,不对con对象进行判空处理,会报错java.lang.NullPointerException,作判空处理后,会打印Console is unavailable。既然不能在IDE中运行,我们打开cmd,用命令窗口来运行该代码。运行结果如图:
(二)格式化输出
System.out.println(x)可以将数值x输入到控制台上,这条命令将以x对应的数据类型所允许的最大非0数字位数打印输出x。
如果希望显示美元符号,美分符号等,就有可能出现问题。所以我们可以使用printf方法。
package CoreJava;
public class PrintfTest {
public static void main(String[] args) {
double x = 10000.0/3.0;
System.out.printf("%8.2f", x);//%表示以格式化输出,8个长度,小数点后两位的浮点数输出。
//最终输出的是: 3333.33(注意:前面有空格,占一位。)
/*
* d表示十进制数,x表示十六进制数,f表示浮点数,s表示字符串,c表示字符,b表示boolean值,h表示散列码*/
System.out.println();
String name = "zxyy";
int age = 23;
System.out.printf("Hello %s. Next year ,you'll be %d.", name,age);
//Hello zxyy. Next year ,you'll be 23.
System.out.println();
/*还有许多标志,也可以对数值进行格式化输出,例如:,可以添加分隔符(3,333.33),+可以打印正数和负数的符号,
空格可以在正数前添加空格,0在数字前补0等
*/
System.out.printf("%,(.4f", x);//3,333.3333
}
}
下面用一个示意图表示格式说明符的语法图:
(三)文件输入与输出
要想对文件进行读取,就要用File对象构造一个Scanner对象。
Scanner in = new Scanner(Paths.get("myfile.txt"),"UTF-8");
要想写入文件,就需要构造一个PrintWriter对象,在构造器中,只需要提供文件名:
PrintWriter pw = new PrintWriter("myfile.txt","UTF-8");
如果该文件不存在,就创建一个文件。