一、标准输入输出流
System类中有两个静态的成员变量:
public static final InputStream in:标准输入流。通常该流对应于键盘输入或由主机环境或用户指定的另一个输入源
public static final PrintStream out:标准输出流。通常该流对应于显示输出或由主机环境或用户指定的另一个输出目标
//把字节流转换为字符流 :用转换流
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入一个字符串:");
String line = br.readLine();
System.out.println("你输入的字符串是:"+line);
自己实现键盘录入数据太麻烦了,所有java就提供了一个类供我们使用
Scanner sc = new Scanner(System.in);
// PrintStream ps = System.out;
// ps.println("hello");
// ps.print(10);
//System.out的本质是一个字节输出流
System.out.println("hello");
System.out.print("100");
二、打印流
分类:
字节打印流:PrintStream
字符打印流:PrintWriter
打印流的特点:
只负责输出数据,不负责读取数据
有自己的特有方法
字节打印流:PrintStream(String fileName):使用指定的文件名创建新的打印流
PrintStream ps = new PrintStream("ps.txt");
//使用特有方法写数据
ps.print(97);
ps.println(98);
ps.close();
字符打印流:
PrintWriter(String fileName) //使用指定的文件名创建一个新的PrintWriter,而不需要自动执行刷新
PrintWriter(Writer out,boolean autoFlush)//创建一个新的PrintWriter -out:字符输出流 -autoFlush:一个布尔值,如果为真,则println,print,或format方法将刷新输出缓冲区
PrintWriter pw = new PrintWriter("pw.txt");
pw.write("hello\r\n");
pw.write("world\r\n");
pw.flush();
pw.println("hello");
pw.println("world");
pw.flush();
PrintWriter pw = new PrintWriter(new PrintWriter("pw.txt"),true);
pw.println("hello");
三、对象序列化流
对象序列化:就是将对象保存到磁盘中,或者在网络中传输对象
这种机制就是使用一个字节序列表示一个对象,该字节序列包含:对象的类型、对象的数据和对象中存储的属性等信息
字节序列写到文件之后,相当于文件中持久保存了一个对象的信息
反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化
对象序列化流:ObjectOutputStream
构造方法:
ObjectOutputStream(OutputStream out):创建一个写入指定的OutputStream的ObjectOutputStream
序列化对象的方法:
void writeObject(Object obj):将指定的对象写入ObjectOutputStream
注意:一个对象要想被序列化,该对象所属的类必须实现Serializable接口
Serializable接口是一个标记接口,实现该接口,不需要重写任何方法
对象反序列化流:ObjectInputStream
构造方法:
ObjectInputStream(InputStream in):创建从指定的InputStream读取的ObjectInputStream
反序列化对象的方法:
Object readObject():从ObjectInputStream读取一个对象
四、Properties
是一个Map体系的集合类
Properties可以保存到流中或从流中加载
// Properties<String,String> prop = new Properties<String,String>();
Properties pro = new Properties();
pro.put("it001", "张三");
pro.put("it002", "李四");
pro.put("it003", "王五");
Set<Object> keyset = pro.keySet();
for(Object key : keyset) {
Object value = pro.get(key);
System.out.println(key+","+value);
}
4.1、Properties作为集合的特有方法:
Object setProperty(String key,String value):设置集合的键和值,都是String类型,底层调用Hashtable方法
String getProperty(String key):使用此属性列表中的指定的键搜索属性
Set stringPropertyNames() :从该属性列表中返回一个不可修改的键集,其中键及其对应的值是字符串
Properties pro = new Properties();
//Object setProperty(String key,String value):设置集合的键和值,都是String类型,底层调用Hashtable方法
pro.setProperty("it001", "张三");
pro.setProperty("it002", "李四");
//Set<String> stringPropertyNames() :从该属性列表中返回一个不可修改的键集,其中键及其对应的值是字符串
Set<String> names = pro.stringPropertyNames();
for(String key : names) {
String value = pro.getProperty(key);
System.out.println(key+","+value);
}
4.2、Properties和IO流结合的方法:
void load(InputStream inStream) //从输入字节流读取属性列表(键和元素对))
void store(OutputStream out,String comments)//将此属性列表(键和元素对)写入此Properties表中,以适应于使用load(InputStream)方法的格式写入输出字节流
Properties pro = new Properties();
// pro.setProperty("it001", "张三");
// pro.setProperty("it002", "李四");
// pro.setProperty("it003", "王五");
// FileWriter fw = new FileWriter("fw.txt");
// pro.store(fw, null);
// fw.close();
FileReader fr = new FileReader("fw.txt");
pro.load(fr);
fr.close();
System.out.println(pro);