Java中IO流的知识点总结

    科技2022-07-20  102

    整体概述

    系统中分为临时储存和硬盘两大块 临时储存:当前正在运行的程序提供资源 硬盘:文件中的资源 IO流就是在这两者之间进行操作的

    IO流分为字节流和字符流

    字节流:InputStream,OutputStream字符流:Reader, Writer

    字节流

    一切皆字节

    字节输出流OutputStream

    把临时存储的东西存到硬盘上(文件中)

    常用方法

    void writer(); void flash(); void close();

    其中输出字节流子类中最常用的就是FileOutputStream 写数据的时候会把97转化为二进制数据,然后软件把二进制文件解码成a;

    //一次写一个字节 public void write(byte b); //一次写多个字节 public void write(byte[] bytes); public void write(byte[] bytes, int offset, int len);

    附加: 字符串怎么转化为字节数组

    byte[] bytes = "HelloWorld".getBytes();

    数据的追加,续写

    //构造方法 FileOutputStream(String pathname, boolean append); FileOutputStream(File file, boolean append);

    字节输入流InputSream

    共有的方法

    int read()// 返回值是字符的编码值 int read(byte[] bytes)// 返回值是数组的长度,bytes是读取的数组 void close()

    构造方法

    FileInputStream(FIle file); FileInputStream(String name);

    一般的读取工作是这样的

    FileInputStream fis = new FileInputStream("D:\\Java\\javaExmaple1\\src\\practice\\IOStream\\a.txt"); int len = 0; while((len = fis.read()) != -1) { System.out.println((char) len); } fis.close();

    附加:String类的构造方法

    String(byte[] bytes); //比如 String s = new String(bytes);

    先关闭写的流,再关闭读的流

    字符流

    分为字符输入流和字符输出流 Reader: 常用 FileReader Writer: 常用FileWriter

    字符输入流Reader

    通用的方法

    int read(); int read(char[] cbuf); void close();

    接下来介绍FileReader FileReader extends InputStreamReader

    构造方法

    FileReader(String pathname); FileReader(File file);

    附加: String构造方法

    String(char[] chars); String (byte[] bytes);

    字符输出流Writer

    公用的方法 (可以直接写如字符串)

    void write(char[] cbuf); void write(char[] cbuf, int offset, int len); void write(String str); void write(String str, int offset, int len); void flush();//把缓冲流中的数据刷新到临时存储中去 void close();

    FileWriter extends OutputStreamWriter

    构造方法

    FileWriter(File file, boolean append); FileWriter(String pathname,bollean append);

    附加:异常处理

    try{ //可能会产生异常的代码 }catch(异常类变量 变量名) { //异常处理逻辑 }finally{ //一定会执行的代码,一般是资源释放 }

    JDK7新特性

    try(定义流对象,之后会自动释放,就不需要finally中间用分号){ //可能会产生异常的代码 }catch(异常类变量 变量名) { //异常处理逻辑 }

    JDK9新特性

    A a = new A(); B b = new B(); //这边也是自动释放 try(a;b){ //可能会产生异常的代码 }catch(异常类变量 变量名) { //异常处理逻辑 }

    Properties属性集

    java.util.Properties extends Hashtable<K,V> 实现了map类的方法

    有两个特有方法

    void store(OutputStream out, String comments)//后面的那个是注解的意思 void store(Writer writer,String comments);//写入把properties实现类的对象的内容写入writer了 void load(InputStream in);//读出把in中的数据读出到properties实现类的对象中 void load(Reader reader);

    还有一些作为hasetable的子类的特有方法,k,v都是字符串

    prop.setProperty("lwt","173");//设置,存入键值对,相当于put Set<String> set = prop.stringPropertyNames();// 得到键的集合 ,通过键获取值 String value = prop.getProperty(key);//通过键获取值

    具体实现代码 (哈希表的遍历不能忘)

    public class Demo10Property { public static void main(String[] args) throws IOException { show03(); } private static void show02() throws IOException { Properties prop = new Properties(); prop.setProperty("lwt","173");//设置,存入键值对,相当于put prop.setProperty("ljy","187"); prop.setProperty("zth","184"); FileWriter fw = new FileWriter("D:\\Java\\javaExmaple1\\src\\practice\\IOStream\\prop.txt"); prop.store(fw,"save data"); fw.close(); } public static void show01() { // Properties继承了HashTable // 有三个方法 Properties prop = new Properties(); prop.setProperty("lwt","173");//设置,存入键值对,相当于put prop.setProperty("ljy","187"); prop.setProperty("zth","184"); // 得到键的集合 ,通过键获取值 Set<String> set = prop.stringPropertyNames(); for (String key : set) { // 通过键获取值 String value = prop.getProperty(key); System.out.println(key + "=" + value); } } public static void show03() throws IOException { Properties prop = new Properties(); prop.load(new FileReader("D:\\Java\\javaExmaple1\\src\\practice\\IOStream\\prop.txt")); Set<String> set = prop.stringPropertyNames(); for (String key : set) { String value = prop.getProperty(key); System.out.println(key + "=" + value); } } }
    Processed: 0.009, SQL: 8