• java IO流 字节流 字符流 Poperties


    IO流 字节流 字符流 Poperties

    IO流顶级父类

    image-20200509180102367

    字节流

    字节输出流OotputStream

    java.io.stream抽象类:字节输出流的所有类的超类

    共性方法:
    public void close()//完成流的操作后必须调用
    public void flush()//刷新此输出流并强制任何缓冲的输出字节被写出
    public void write(byte[] bytes)//
    public void write(byte[], int off, int len)//
    public void write(int t)
    

    FileOutputStream类(java.io.FileOutputStream):OutputStream的子类

    构造方法:

    public FileOutputStream(String name)
    public FileOutputStream(File file)
    
    注意:
    • 创建输出流对象,都会清空目标文件中的数据
    • ** 虽然参数为int类型四个字节,但是只会保留一个字节的信息写出**

    数据追加续写:

    public FileOutputStream(File file, boolean append)
    public FileOutputStream(File file, boolean append)
    

    回车与换行

    image-20200509190501110

    字节流输入 InputStream(java.io.InputStream:字节输入流的所有类的超类)

    共性方法:

    public void close()
    public abstract int read()
    public int read(byte[] b)
    

    FileInputStream类(java.io.FileInputStream): InputStream的子类

    构造方法:

    FileInputStream(File file)
    FileInputStream(String name)
    
    注意:
    • 如果没有文件,则抛出FileNotFoundException
    • 虽然读取了一个字节,但是会自动提升为int类型

    开发中常用的方法:

    public class FISRead{
        public static void main(String[] args) throws IOException{
            FileInputStream fis = new FileInputStream("read.txt");
            int len = -1;
            byte[] bytes = new byte[1024];
            while((len = fis.read(bytes)) != -1){
                string s = new String(bytes, 0, len);//最后一行只取len个有效字符
            }
            fis.close();
        }
    }
    

    复制等操作时:

    流的关闭原则:先开后关,后开先关

    字符流

    字符输入流 【Reader】: java.io.Reader

    共性方法:

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

    FileReader类:java.io.FileReader

    注意:

    1. 字符编码:字节与字符对应的规则。
      • Windows系统的中文编码默认是GBK编码表
      • idea中UTF-8
    2. 字节缓冲区:一个字节数组,用来临时储存字节数据
    3. write方法写到缓冲区,不刷新或者不关闭,不会到硬盘文件里

    构造方法:

    FileReader(File file)
    FileReader(String filename)
    

    字符输出流【Writer】:java.io.Writer

    共性方法:

    void write(int c)
    void wtite(char[] cbuf)
    abstract void wtite(char[] cbuf, int off, int len)
    void wtite(String str)
    void wtite(String str, int off, int len)
    void flush()
    void close()
    

    flush与close的区别:

    flush:刷新缓冲区,流对象可以继续使用
    close:先刷新,再通知系统释放资源,流对象不能再使用

    FileWriter类:java.io.Writer

    构造方法:

    FileWriter(File file)
    FileWriter(String fileName)
    

    字符流与字节流的使用

    1. 字符流:只能操作文本文件,不能操作图片,视频等非文本文件
    2. 字节流:单纯读写文本文件时,使用字符流

    IO异常处理

    jdk7之前

    public class Test {
        public static void main(String[] args) {
            FileWriter fw = null;
            try{
                fw = new FileWriter("fw.txt");
                fw.write("abc");
            }catch (IOException e){
                e.printStackTrace();
            }finally {
                try {
                    if(fw != null){
                        fw.close();
                    }
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }
    }
    

    jdk 7 新特性

    import java.io.FileWriter;
    import java.io.IOException;
    
    public class Test {
        public static void main(String[] args) {
            // try-with-resource 语句,该语句确保了每个资源在语句结束时关闭
            try (FileWriter fw = new FileWriter("fw.txt");){
                fw.write("abc");
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }
    

    jdk 9新特性

    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class Test {
        public static void main(String[] args) throws IOException {
            final FileReader fr = new FileReader("in.txt");
            FileWriter fw = new FileWriter("out.txt");
            try (fr; fw) {
                int b;
                while ((b = fr.read()) != -1) {
                    fw.write(b);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    属性集

    java.util.Properties 继承于 Hashtable ,来表示一个持久的属性集。它使用键值结构存储数据,每个键及其 对应值都是一个字符串

    构造方法:

    public Properties()
    

    基本存储方法:

    public Object setProperty(String key, String value)//保存一对键值对
    public String getProperty(String key)//以键找值
    public Set<String> stringPorpertyNames()//键集
    

    与流相关的方法:

    public void load(InputStream isStream)//从字节流中读取键值对
    public void load(Reader reader)//按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)
    void store(OutputStream out,String comments)//以适合使用load()方法加载到Peoperties表中的格式,将此Properties表中的属性列表(键和元素对)写入输出流
        参数:comments 表示注释信息,一般为“”空字符串
        表中行开头加#,那改行被注释不能被load方法读取
    void store(Writer writer, String comments)
    

    tips : 文本中的数据必须是键值对形式,可以使用空格、等号、冒号等符号分隔

  • 相关阅读:
    现代软件工程 第一章 概论 第4题——邓琨
    现代软件工程 第一章 概论 第9题——邓琨
    现代软件工程 第一章 概论 第7题——张星星
    现代软件工程 第一章 概论 第5题——韩婧
    hdu 5821 Ball 贪心(多校)
    hdu 1074 Doing Homework 状压dp
    hdu 1074 Doing Homework 状压dp
    hdu 1069 Monkey and Banana LIS变形
    最长上升子序列的初步学习
    hdu 1024 Max Sum Plus Plus(m段最大子列和)
  • 原文地址:https://www.cnblogs.com/zx-coder/p/12861198.html
Copyright © 2020-2023  润新知