【自学】Java核心技术卷1_3.7:输入输出
使用console输入:
import java.io.Console;
public class test_Console {
public static void main(String[] args) {
Console c = System.console();
String username = c.readLine("User name:");
c.printf("user:"+username+"\n");
char [] passwd =c.readPassword("Password:");
c.printf(String.valueOf(passwd));
}
}
- 这段测试代码在Eclipse和Intellij出错:
根据参考博客可知是因为console类要从控制台获取输入,所以直接从刚刚生成.java文件的文件夹进入dos窗口编译运行java文件,可见Password的输入确实不可见,与Scanner不同:
用Scanner输入:
import java.util.Scanner;
public class hello_intellij {
public static void main(String[] args){
int i;
Scanner in=new Scanner(System.in);
i=in.nextInt(); //还有很多nextDouble(),nextLine()...
System.out.println(i);
}
}
- 绿色的123即显示的输入,白色的123是println()的输出
格式化输出:
print()就是一般的标准输出,但是不换行 (参考博客)
println()和print基本没什么差别,就是最后会换行
printf()主要是继承了C语言的printf的一些特性,可以进行格式化输出
- printf格式化输出的参数索引格式:%1$;%<
public class temp {
public static void main(String[] args){
int a=8;
double b=1.23456;
System.out.printf("%1$d,%2$.2f,%2$+f\n",a,b);
System.out.printf("%d,%.2f,%<+f",a,b);
}
}
- 用println()时会出错:
public class temp {
public static void main(String[] args){
int a=8;
double b=1.23456;
System.out.println("%1$d,%2$.2f,%2$+f",a,b);
System.out.printf("%d,%.2f,%<+f",a,b);
}
}
文件输入输出:
- 读文件:用File对象构造Scanner对象Scanner in=new Scanner(Path.get(“myfile.txt”));
- 写文件:用文件名构造PrintWriter对象PrintWriter out=new PrintWriter(“myfile.txt”);
- ps:如果用一个不存在的文件构造Scanner对象,或者用一个不能被创建的文件名构造一个PrintWriter对象,就会发生比“被零整除”更严重的异常,所以已经知道有可能出现“找不到文件”的异常时,需要在方法中标记throws