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

posted @ 2020-05-09 23:34  归来也无风雨也无晴  阅读(199)  评论(0编辑  收藏  举报