2020-8-3
学习目标:
今天主要把io流的相关内容看完。
学习内容:
File类的综合案例使用
使用file类的方法实现了文件夹内文件的搜索和目标文件的打印
public static void getFile(File dir) {
File[] files = dir.listFiles(); //获取子目录下的名称
for (File file1 : files) {
if(file1.isDirectory()){ //如果是文件夹进行递归
getFile(file1);
}
if(file1.isFile()){ // 如果是文件判断是不是以“.java结尾”,是的话输出。
if(file1.getName().endsWith(".java")){
System.out.println(file1.getName());
}
}
}
}
文件的复制
- 根据字节流复制
FileInputStream fis =new FileInputStream("a.jpg"); FileOutputStream fos =new FileOutputStream("b.jpg"); byte [] bytes = new byte[10]; // 每次读的内容 int len =0; //每次读取的有效个数 while ((len=fis.read(bytes))!=-1){ fos.write(bytes,0,len); } fos.close(); // 先关闭写的,再关闭读的 fis.close();
- 根据字节流(可以复制中文)
FileReader fr =new FileReader("a.txt");
FileWriter fw =new FileWriter("b.txt");
char [] chars =new char[10];
while ((len= fr.read(chars))!=-1){
fw.write(chars,0,len);
System.out.println(new String(chars));
}
fw.flush(); //不刷新不会出来
fw.close();
fr.close();
序列化和反序列化
序列化是把对象以流的方式写入到文件中保存。ObjectOutStream:对象的序列化流
反序列化是把文件中保存的对象以流的形式读取出来。ObjectInputStream:对象的反序列化流
User user =new User("张三",18); //User类需要实现Serializable接口,标明序列化相关
ObjectOutputStream oop =new ObjectOutputStream(new FileOutputStream("a.txt"));
oop.writeObject(user); // 写入到a.txt;
oop.flush();
oop.close();
ObjectInputStream oip = new ObjectInputStream(new FileInputStream("a.txt"));
User o = (User)oip.readObject(); //读取类并强转
System.out.println(o);
oip.close();
学习时间:
晚上9.23-晚上12.00学习产出:
今天晚上学习了IO流的相关内容,包括file类的基本方法,字节流:FileInputStream和 FileOutputStream,字符流: FileReader和FileWriter。带缓冲的字节流BufferedInputStream和BufferedOutputStream,带缓冲的字符流BufferedReader和BufferedWriter。