本帖最后由 小石姐姐 于 2018-4-26 14:16 编辑
Java输入输出流笔记
Day_10输入流,输出流
标准输入和标准输出流System.in -->InputStreamReader--Reader--> 打印流的特有功能PrintWriter类
构造方法
PrintWriter PrintWiter(String filepath)创建对象,字符流 PrintWriter PrintWriter(Writer out, boolean autoFlush): 包装字符输出流创建对象, 同时设置是否自动刷新 PrintWriter(OutputStream out, boolean autoFlush): 包装字节输出流创建对象, 同时设置是否自动刷新
PrintWriter, 字符打印输出流的特点
自动换行. println(). 会根据系统自动确定换行符 自动刷新. 通过构造方法的配置可以实现(只在调用println(), printf(), format()时有用) 也是包装流, 类似于BufferedWriter, 自身没有写出功能 可以把字节输出流转换为字符输出流 不能输出byte字节, 可以输出其他任意类型(要输出字节可以使用PrintStream) 关流不会抛出异常(此类中的方法不会抛出 I/O 异常,尽管其某些构造方法可能抛出异常)
转换流
# 对象流
* ObjectInputStream 从文件中读入一个对象到内存中
* ObjectOutputStream 将内存中的对象写入文件中
创建集合对象,存储类的对象,然后直接写入类的对象
读取数据时,直接读取集合对象,就不会报异常
# 序列化接口
但我们改变成员变量的时候,增删成员变量, 如果没有给类生成序列号,那么在读取类成员变量数据的时候,会报错。
生成序列号的前提,我们**必须实现序列化接口**,否则无法生成序列号对象操作流概述对象操作流 (都属于字节流)
ObjectInputStream
ObjectOutputStream
例题:
编码表把计算机底层的二进制数据转换成我们能看到的字符 * ASCII 编码的读取和写入 /*
* 有字符串“键盘敲烂,月薪过万”
以“UTF-8”编码写到根路径下的aa.txt文件中
以“UTF-8”编码读取并打印到控制台
有字符串“键盘敲烂,月薪过万”
以“UTF-8”编码写到根路径下的aa.txt文件中
以“UTF-8”编码读取并打印到控制台
*/
public class UTFDemo {
public static void main(String[] args) throws IOException {
// 输出流
method();
// 输入流
method2();
}
private static void method2() throws FileNotFoundException, IOException, UnsupportedEncodingException {
FileInputStream fi = new FileInputStream("demo.txt");
// 定义一个字节数组
byte[] by = new byte[1024];
int line = fi.read(by);
// 将读取的字节数据转换成UTF-8的格式成字符串来显示
String str = new String(by, 0, line, "UTF-8");
// 输出数据
System.out.println(str);
// 关闭资源
fi.close();
}
private static void method() throws UnsupportedEncodingException, FileNotFoundException, IOException {
// 定义一个字符串
String s = "键盘敲烂,月薪过万!";
// 将字符串转换成byte数组的形式
byte[] by = s.getBytes("UTF-8");
FileOutputStream fs = new FileOutputStream("demo.txt");
fs.write(by);
fs.close();
}
}特殊的和Map类似Properties类 继承了Hashtable<K, V>, 实现Map<K,V>接口, 以键值对方式存储数据 作用: 保存键值对信息, 可与IO流结合使用, 将数据方便的写入到文件, 或从文件中读取到集合 应用场景: 保存程序的配置信息
注意:
|
|