Java中IO

作者: iDevOps | 来源:发表于2019-09-15 21:55 被阅读0次

    java.io包

    分类
    • 按流向分类
      输入流: 把数据从其他设备上读取到内存中的流
      输出流: 把数据从内存中写出到 其他设备上的流
    • 按数据类型分类
      字节流:以字节为单位,读写数据的流
      字符流:以字符为单位,读写数据的流
    顶级父类
    输入流 输出流
    字节流 InputStream OutputStream
    字符流 Reader Writer
    字节流

    一切皆字节

    • 输入流(InputStream)


      常用子类FileInputSteam
    构造函数
    FileInputStream(File file)   #File对象
    FileInputStream(String name)   #文件路径名
    
    常用方法
    public void close() :关闭此输入流并释放与此流相关联的任何系统资源
    public abstract int read() : 从输入流读取数据的下一个字节
    public int read(byte[] b) : 从输入流中读取一些字节数,并将它们存储到字节数组b中 
    ......
    
    示例
    FileInputStream fs = new FileInputStream("test.txt");
    byte[] b = new byte[2];
    int len;
    while ((len = fs.read(b)) != -1){
        System.out.println(new String(b));
    }
    fs.close();
    
    • 输出流(OutputStream)
    构造函数
    public FileOutputStream(File file) :创建文件输出流以写入由指定的 File对象表示的文件。 
    public FileOutputStream(String name) : 创建文件输出流以指定的名称写入文件
    public FileOutputStream(File file, boolean append) :是否追加
    public FileOutputStream(String name, boolean append) : 是否追加
    
    常用方法
    write(int b)   每次可以写出一个字节数据
    write(byte[] b)  每次可以写出数组中的数据
    write(byte[] b, int off, int len)  每次写出从off索引开始,len个字节
    
    示例代码
    FileOutputStream fos = new FileOutputStream("test.txt");
    fos.write(97); //int类型四个字节,但是只会保留一个字节的信息写出
    fos.write("测试".getBytes());
    fos.write("abcdefg".getBytes(), 2, 2);
    fos.write("\r\n".getBytes(), 2, 2);  //换行 Windows : \r\n Mac和Linux : \n 
    fos.close(); //流操作完毕后,必须释放系统资源,调用close方法,千万记得
    
    字符流

    当使用字节流读取文本文件时,可能会有一个小问题。就是遇到中文字符时,可能不会显示完整的字符,那是因为 一个中文字符可能占用多个字节存储。所以Java提供一些字符流类,以字符为单位读写数据,专门用于处理文本文件。

    • 输入流(Reader)
    构造方法
    FileReader(File file) : 创建一个新的 FileReader ,给定要读取的File对象
    FileReader(String fileName) : 创建一个新的 FileReader ,给定要读取的文件的名称
    
    常用方法
    public int read() : 从输入流读取一个字符
    public int read(char[] cbuf) : 从输入流中读取一些字符,并将它们存储到字符数组cbuf中 
    public void close() :关闭此流并释放与此流相关联的任何系统资源
    
    示例代码
    读取字符
    FileReader reader = new FileReader(new File("test.txt"));
    int b;
    while ((b = reader.read()) != -1){
        System.out.println((char)b);
    }
    reader.close();
    读取字符数组
    FileReader reader = new FileReader(new File("test.txt"));
    int len;
    char[] b = new char[2];
    while ((len = reader.read(b)) != -1){
        System.out.println(b);
    }
    reader.close();  
    
    • 输出流(Writer)
    构造函数
    FileWriter(File file) : 创建一个新的 FileWriter,给定要读取的File对象。 
    FileWriter(String fileName) : 创建一个新的 FileWriter,给定要读取的文件的名称
    
    常用方法
    void write(int c) 写入单个字符
    void write(char[] cbuf) 写入字符数组
    abstract  void write(char[] cbuf, int off, int len) 写入字符数组的某一部分,off数组的开始索引,len 写的字符个数
    void write(String str) 写入字符串
    void write(String str, int off, int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个 数
    void flush() 刷新该流的缓冲
    void close() 关闭此流,但要先刷新
    
    示例代码
    FileWriter fw = new FileWriter("test.txt");
    fw.write(97);
    fw.write('a');
    fw.write("bbbbbbb");
    fw.write("测试");
    fw.close();
    
    缓冲流
    1. 对普通字节流和字符流的增强
    2. 基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO 次数,从而提高读写的效
    3. 字节缓冲流: BufferedInputStream , BufferedOutputStream
    4. 字符缓冲流: BufferedReader , BufferedWriter
    • 字节缓冲流
    构造方法
    public BufferedInputStream(InputStream in) :创建一个新的缓冲输入流。 
    public BufferedOutputStream(OutputStream out) : 创建一个新的缓冲输出流。
    
    示例代码
    BufferedInputStream bis = new BufferedInputStream(new FileInputStream("test.txt"));
    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("test1.txt"));
    byte[] b = new byte[1028];
    while (bis.read(b) != -1){
        bos.write(b);
    }
    bis.close();
    bos.close();
    
    • 字符缓冲流
    构造方法
    public BufferedReader(Reader in) :创建一个 新的缓冲输入流
    public BufferedWriter(Writer out) : 创建一个新的缓冲输出流
    
    特有方法
    BufferedReader: public String readLine() : 读一行文字。 
    BufferedWriter: public void newLine() : 写一行行分隔符,由系统属性定义符号
    
    示例代码
    BufferedReader br = new BufferedReader(new FileReader("test.txt"));
    String line = null;
    while ((line = br.readLine()) != null){
        System.out.println(line);
    }
    br.close();
    

    相关文章

      网友评论

          本文标题:Java中IO

          本文链接:https://www.haomeiwen.com/subject/acodyctx.html