字节流
字节输出流
FileOutputStream
使用字节输出流写出数据到文件:
1.创建文件字节输出流对象
FileOutputStream fos = new FileOutputStream("文件路径");
2.调用wirte方法写数据到文件
// 0 1 2 3 4
byte[] buf = {97, 98, 99, 100, 101};
// void write(byte[] b) 将一个字节数组写入文件中(一次性写多个)
fos.write(buf);
// 3.关闭文件.必须要做的
fos.close();
字节输入流
FileInputStream
使用字节输入流读取数据到程序:
FileInputStream fis = new FileIntpuStream("文件路径");
int ch = fis.read(); // 读取一个字节
byte[] buf = new byte[1024];
int len = fis.read(buf); // 读取一个字节数组
fis.close();
其中read(byte[])方法的原理:读取多个数据保存到byte[]中,返回读取的个数;
字节和字符之间转换
1.String转byte[]使用哪个方法?
String str = "你好,世界!";
byte[] buf = str.getBytes();
2.byte[]转String使用哪个方法?
byte[] bytes = {97, 98, 99, 100};
String str = new String(bytes);
字符流
字符输出流
FileWirter
(一)使用FileWirter写数据到文件:
fr.wirte(字符);写入字符
fr.wirte(字符数组);写入字符数组
fr.wirte(字符数组,0, 个数);写入字符数组,并且可以选择写入开始位置,写入个数
fr.write(字符串);写入字符串
fr.write(字符串, 0, 个数);写入字符串,并且可以选择写入开始位置,写入个数
FileWriter fr = new FileWriter("文件路径");//创建文件字符输出流对象
fr.wirte('a');
fr.wirte(字符数组);
fr.wirte(字符数组,0, 个数);
fr.write(字符串);
fr.write(字符串, 0, 个数);
fr.close();//关闭流
(二FileWriter中关闭和刷新方法的区别:
flush: 刷新后还可以继续写数据。
close: close后不能再写数据, close也会刷新。
(三)FileWriter写数据实现换行和追加写
换行: “\r\n”
追加写: 构造方法append参数设置true
FileWriter fr = new FileWriter(“文件路径”, true);
字符输入流
FileReader
FileReader fr = new FileReader("文件路径");
int ch = fr.read(); // 读取一个字符
char[] chs = new char[1024];
int len = fr.read(chs);
// 读取一个字符数组的数据.读取到的多个数据保存chs数组中,返回读取到的个数。
IO异常处理
JDK7以前:
FileReader fr = null;
try {
fr = new FileReader("文件路径");
int ch = fr.read();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
// null不能去调用方法
if (fr != null) {
try {
fr.close();
} catch (IOException e) {
System.out.println("关闭流失败...");
}
}
}
JDK7以后:
JDK7及以后的处理方式
自动关流
try (能自动关流的代码/创建IO流的代码) {
其他代码
} catch(异常类名 变量名) {}
try (FileReader fr = new FileReader("文件路径");
FileWriter fw = new FileWriter("文件路径")
) {
int ch = fr.read();
System.out.println(ch);
} catch (FileNotFoundException e) {
System.out.println("文件没有找到");
} catch (IOException e) {
System.out.println("IO异常");
}
Properties类:
Properties实现了Map接口,是一个集合,存储键值对的数据
Properties的每键值都是一个字符串
Properties内的数据可以很方便的保存到文件中
Properties类特有方法:
getProperty(String key) 获取数据。
setProperty(String key, String value) 添加数据。