20190801~20190804总结

it2025-04-30  9

20190801 Day 17 内容回顾: java专题 IO流 Input and Output Stream(输入输出流)

1、File对象,java中专门用来操作文件的一个对象 构造函数 File(String path); File(String parent,String child); File(File file,String child); File(Uri url); 常见方法: createNewFile() delet() exists() isFile() isDirectory() getAbsolutePath() getAbsoluteSpace() getName() getFreeSpace() getUsableSpace() getTotalSpance() length() mkdir() mkdirs() list() listFiles() 2、IO流 IO的分类(包含的关系,相互掺杂的) |–流的方向 输入流和输出流 所有的字节输入流都是以InputStream开头的 所有的字节输出流都是以OutputStream开头的 |–流的类型 字节流和字符流 字节流对应(InputStream、OutputStream) 字符流对应(Reader、Writer) |–流的作用 节点流和过滤流(装饰流) Filter 过滤流(FilterInputStream、FilterOutStream、FilterReader、FilterWriter) 过滤流的已知直接子类:BufferedInputStream (查看文档有很多) DataInputStream DateOutputStream 转换流:转换字节和字符,准确的说是 将字节流转换成字符串(InputStreamReader、OutputStreamWriter) 使用字节输入流,读取了一个磁盘上的文件 |–1.创建对应的流 |–2.创建一个字节数组 |–3.定义一个int类型的长度 |–4.循环读取read(数组) |–5.关闭流。要放在finally中(最重要) 使用字节流,读入读出数据 使用过滤流,读取数据 |–如果过滤流没有关闭,会导致数读不全 |–装饰者的设计模式

设计模式:所有设计模式的本质:解耦合

编程中有个OCP原则(open closed principle):对于增加开放、对于修改关闭

课堂练习:把数字存储到磁盘上 123456 保存数据类型用out 读出数据类型用的是in 要站在内存的角度

用数据流(过滤流(FilterxxxxStream)的子类) 如果需要保存数据(数值)类型,建议使用数据流(DataOutputStream)完成

读入数据: public static void main(String[] args) { DataOutputStream dis = null; try { dis = new DataOutputStream(new FileOutputStream(“e:\a.dat”)); dis.writeInt(123456); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (dis != null) { try { dis.close(); } catch (IOException e) { e.printStackTrace(); } } } } } 读入、读出数据: public static void main(String[] args) {

DataOutputStream dos = null; DataInputStream dis = null; try { dos = new DataOutputStream(new FileOutputStream("d:/a.txt")); dos.writeInt(123); dos.writeInt(1234); dos.writeInt(12345); dos.writeInt(123456); try { dis = new DataInputStream(new FileInputStream("d:/a.txt")); System.out.println(dis.readInt()); System.out.println(dis.readInt()); System.out.println(dis.readInt()); System.out.println(dis.readInt()); } catch (EOFException e) { System.out.println("数据输入完成"); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally{ if(dis != null){ try { dis.close(); } catch (IOException e) { e.printStackTrace(); } } if(dos != null){ try { dos.close(); } catch (IOException e) { e.printStackTrace(); } } } }

}

下午: 字节流→在数据流动的过程中,数据是以字节的形式流动的 字符流→在数据传输过程中,数据以字符的形式流动(主要是文本的传输) |–字符输入流:Reader类 |–字符输出流:Writer类

注意: 使用过滤流(包装流、缓冲流): 包装字节流时,建议使用BufferedInputStream、BufferedOutputStream 包装字符流时,建议字符输入流使用BufferedReader,建议字符输出流使用PrintWriter 字符流输入输出: public void testCharStreamOutput02() { BufferedReader br = null; PrintWriter out = null; try { br = new BufferedReader(new FileReader(“E:\\workspace\\day16\\src\\com\\openlab\\io\\TestFile.java”)); // 节点流 out = new PrintWriter(“e:\test.java”); String str = null; while((str = br.readLine()) != null) { out.println(str + “\n”); //不写的话 他出来的都是一行代码,这个写了就可以换行 } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } if (out != null) { out.close(); } } } }

//标准流是字节流 //System.in 标准输入流 //System.out 标准输出流 转换流: 转换流的本质是字符流,主要功能就是将字节流转换成字符流

在Java中,多层直接使用break关键字无法退出 但是在开发中,我们有时需要退出多层循环,这个时候我们需要使用lable public void testChangeStream01() throws Exception { // 标准流是字节流 // System.in 标准输入流 // System.out 标准输出流 InputStream is = System.in; // 转换流 InputStreamReader isr = new InputStreamReader(is); label:while (true) { System.out.println(“请输入您要输入的内容:”); char[] buf = new char[1024]; int len = 0; while((len = isr.read(buf))> -1) { String str = new String(buf, 0, len); if (str.trim().equals(“exit”)) { // break; // 直接退出程序 // System.exit(0); // 使用label退出多层循环 break label; } String rstr = str.replace(“吗?”, “”); System.out.println(rstr); } } }


20190802 Day 18 内容回顾: IO流 |–输入流 字节输入流都要实现InputStream抽象类、字符输入流都要实现Reader抽象类 |–输出流 …OutputStream抽象类,字符输出流都要实现Writer抽象类

|--字节流 InputStream OutputStream 为父类的 |--字符流 Reader Writer为父类的 |--节点流 |--过滤流 |--data流 数据流是过滤流 |--转换流 实现字节转换为字符流 |--对象流 |--对象输入流(序列化 | 串行化),将我们java的对象存储在磁盘上 |--对象输出流(反序列化),将存储在磁盘上的对象读取到内存中

demo: 1、将String存储到磁盘上

注意:在java中,对象默认是没办法序列化的,如果需要序列化对象必须实现一个接口Serializable的接口 注意:这个接口是空接口,是jdk1.1定义的 public interface Serializable{

如果你要序列化一个对象,必须实现Serializable

自定义类型的序列化和反序列化 必须要生成一个空接口serializable 然后生成序列号,再正常定义一个类

注意:如果java类的某些属性使用tranistan关键字修饰,则表示这些属于瞬时属性,这些属性无法参与序列化

考虑下: 用户管理系统,如果需要持戒化数据的管理系统? 如果我们需要持久化数据 只需要将user对象通过IO磁盘就可以了

最新回复(0)