java.util.Scanner (读)
Scanner sc = new Scanner(System.in); String str1 = sc.nextLine();
java.io.PrintWriter (写)
Writer writer = new PrintWriter("abc.txt");
Java的IO操作中有面向字节(Byte)和面向字符(Character)两种方式 (注意命名后缀)
可序列化接口Serializable
可以写入输出流中的对象成为可序列化的,可序列化对象的类必须实现Serizlizable接口。
Serialzable接口是一种标记性接口,因为它没有方法,所以不需要在类中为实现Serializable接口增加额外的代码。实现这个接口可以启动Java的序列化机制,自动你完成存储对象和数组的过程。
关键字transient告诉Java虚拟机将对象写入对象流时忽略这些数据域。
序列化数组
只有数组中的元素都是可序列化的,这个数组才是可序列化的。一个完整的数组可以用writeObject方法存入文件,随后用readObject方法恢复。
示例:
1 package com.artificerpi.demo; 2 3 import java.io.FileInputStream; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.io.ObjectInputStream; 7 import java.io.ObjectOutputStream; 8 import java.io.Serializable; 9 10 public class Hello { 11 public static void main(String[] args) throws ClassNotFoundException, IOException { 12 int[] numbers = { 1, 2, 3, 4, 5 }; 13 String[] strings = { "John", "Jim", "Jake" }; 14 Programmer programmer = new Programmer("artificerpi", 17); 15 ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream("array.dat", false)); // no 16 // append 17 18 output.writeObject(numbers); 19 output.writeObject(strings); 20 output.writeObject(programmer); 21 22 output.close(); 23 24 ObjectInputStream input = new ObjectInputStream(new FileInputStream("array.dat")); 25 26 int[] nums = (int[]) input.readObject(); 27 String[] strs = (String[]) input.readObject(); 28 Programmer programmer2 = (Programmer) input.readObject(); 29 30 for (int a : nums) { 31 System.out.print(a); 32 } 33 System.out.println(); 34 35 for (String s : strs) { 36 System.out.print(s); 37 } 38 39 System.out.println(programmer2.name + programmer2.age); 40 41 } 42 } 43 44 class Programmer implements Serializable { 45 String name; 46 transient int age; 47 48 public Programmer(String name, int age) { 49 this.name = name; 50 this.age = age; 51 } 52 53 }