【自学】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出错:

【自学】Java核心技术卷1_3.7:输入输出【自学】Java核心技术卷1_3.7:输入输出

根据参考博客可知是因为console类要从控制台获取输入,所以直接从刚刚生成.java文件的文件夹进入dos窗口编译运行java文件,可见Password的输入确实不可见,与Scanner不同:

【自学】Java核心技术卷1_3.7:输入输出【自学】Java核心技术卷1_3.7:输入输出

用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()的输出

【自学】Java核心技术卷1_3.7:输入输出

格式化输出:

print()就是一般的标准输出,但是不换行 (参考博客)

println()和print基本没什么差别,就是最后会换行

printf()主要是继承了C语言的printf的一些特性,可以进行格式化输出

【自学】Java核心技术卷1_3.7:输入输出

【自学】Java核心技术卷1_3.7:输入输出

【自学】Java核心技术卷1_3.7:输入输出

  • 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);
    }
}

【自学】Java核心技术卷1_3.7:输入输出

  • 用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);
    }
}

【自学】Java核心技术卷1_3.7:输入输出

文件输入输出:

  • 读文件:用File对象构造Scanner对象Scanner in=new Scanner(Path.get(“myfile.txt”));
  • 写文件:用文件名构造PrintWriter对象PrintWriter out=new PrintWriter(“myfile.txt”);
  • ps:如果用一个不存在的文件构造Scanner对象,或者用一个不能被创建的文件名构造一个PrintWriter对象,就会发生比“被零整除”更严重的异常,所以已经知道有可能出现“找不到文件”的异常时,需要在方法中标记throws

【自学】Java核心技术卷1_3.7:输入输出