• 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 : 文本中的数据必须是键值对形式,可以使用空格、等号、冒号等符号分隔

  • 相关阅读:
    Winform 让跨线程访问变得更简单
    Winform 单实例运行
    webservice 测试窗体只能用于来自本地计算机的请求
    使用srvany.exe把程序安装成windows服务
    学习ExtJS4 常用控件
    [leetcode]Unique Binary Search Trees
    [leetcode]Subsets II
    [leetcode]Subsets
    [leetcode]Valid Number
    [leetcode]Permutation Sequence
  • 原文地址:https://www.cnblogs.com/zx-coder/p/12861198.html
Copyright © 2020-2023  润新知