1.知识点:
- 字节流:FileInputStream类(读取文件内容)FileOutputStream类(输出文件内容)
- BufferedInputStream(读取文件)BufferedOutputStream(输出文件)
- ObjectInputStream(读入文本里存的对象) ObjectOutputStream(对象写入文本)
- FileReader(读取文件内容) FileWriter (写入文件)
- BufferedReader(读取内容文件)BufferedWriter(写入文件)
2.知识点的运用:
1.I/O对象:不属于内存对象,创建后需要自己关闭。
2.创建文件:
//创建文件完整路径
String path = "文件目录";
//拼接目录
File file = new File(path.concat("\\1.txt"));
//判断文件是否存在
if (file.exists() == false){
try {
file.createNewFile();
//异常处理
}catch (IOException e){
System.out.println("IO异常了");
}
}
3.创建目录:
mkdirs()可以建立多级文件夹, mkdir()只会建立一级的文件夹, 如下:
new File("/tmp/one/two/three").mkdirs();
//执行后, 会建立tmp/one/two/three四级目录
new File("/tmp/one/two/three").mkdir();
//则不会建立任何目录, 因为找不到/tmp/one/two目录, 结果返回false
// throws IOException :抛出异常
public void createDirectory() throws IOException {
File f = new File("文件目录");
f.mkdir();
}
4.字节流与字符流的区别:
- 字节流能对文件里面所有的数据类型进行操作。
- 字符流是操所文本数据的,只能操作文本数据。
5.字节流:
- FileInputStream类(读取文件类容):该方法是一个一个字节地读取数据,效率很慢
//例1:
FileInputStream fs = new FileInputStream("文件路径");
byte[ ] name = new byte[12];
int count = fs.read(name);
fs.close();
//例2:
FileInputStream fs = new FileInputStream("文件路径");
long len = 0;
while((len = fs.read()) != -1) {
char c = (char) len;
System.out.print(c);
}
fs.close();
- FileOutputStream类(写入文件)
public void class() throws IOException {
FileOutputStream fos = new FileOutputStream("文件路径");
fos.write("123".getBytes());
byte[ ] text = {'1','2','3'};
fos.write(text);
fos.close();
}
- BufferedInputStream(读取文件)
FileInputStream fis = new FileInputStream("文件路径");
BufferedInputStream bis = new BufferedInputStream(fis);
byte[] b = new byte[1024];
while(bis.read(b) != -1) {
System.out.println(new String(b));
}
bis.close();
fis.close();
- BufferedOutputStream(写入文件)
public void class() throws IOException {
FileOutputStream fos = new FileOutputStream("文件路径");
BufferedOutputStream bop = new BufferedOutputStream(fos);
bop.write("123".getBytes());
byte[ ] in = new byte[1024];
while(bop.write(in) != -1){
bop.write(in,0,bop.write(in));
}
bop.close();
fos.close();
}
- 带Buffered和不带Buffered的区别
带Buffered的是缓冲字节输入流或者是缓冲字节输出流,它的效率比不带Buffered的效率快很多。
6.序列化:
将对象转换成字节。
想要将对象写入文本,该对象必须实现Serializable接口,该接口为空接口,叫做标志性接口。 - 对象写入文本
public class MyClass {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("文件路径");
ObjectOutputStream oos = new ObjectOutputStream(fos);
person m = new person ();
m.name = "小王";
m.age = 20;
oos.writeObject(m);
oos.close();
fos.close();
}
}
public class person implements Serializable {
public String name;
public int age;
}
- 读入文本里存的对象(沿用上一个person类)
FileInputStream fos = new FileInputStream("文件路径");
ObjectInputStream oos = new ObjectInputStream(fos);
person m = new person ();
m = (person) oos.readObject();
System.out.println(m);
oos.close();
fos.close();
7.字符流:
- FileReader(读取文件内容)
FileReader fr = new FileReader("文件路径");
int len = 0;
//一个字符一个字符的读
while((len = fr.read()) != -1) {
System.out.print((char)len);
}
fr.close();
image.png
- FileWriter (写入文件)
public void class() throws Exception {
FileWriter fw = new FileWriter("文件路径");
fw.write("abc");
fw.close();
}
image.png
- BufferedReader(读取内容文件):
public void class() throws Exception {
FileReader fw = new FileReader("文件路径");
BufferedReader br = new BufferedReader(fw);
String str = null;
while((str = br.readLine())!= null){
System.out.println(str);
}
br.close();
fw.close();
}
- BufferedWriter(写入文件)
FileWriter fw = new FileWriter("文件路径");
BufferedWriter bw = new BufferedWriter(fw);
bw.write("java开发");
bw.close();
fw.close();