6. java IO 流

一、流的分类:
* 1.操作数据单位:字节流、字符流
* 2.数据的流向:输入流、输出流
* 3.流的角色:节点流、处理流
*
二、流的体系结构
* 抽象基类               节点流(或文件流)                                            缓冲流(处理流的一种)
* InputStream          FileInputStream (read(byte[] buffer))                   BufferedInputStream (read(byte[] buffer))
* OutputStream      FileOutputStream (write(byte[] buffer,0,len)          BufferedOutputStream (write(byte[] buffer,0,len) / flush()
* Reader                 FileReader (read(char[] cbuf))                              BufferedReader (read(char[] cbuf) / readLine())
* Writer                    FileWriter (write(char[] cbuf,0,len)                        BufferedWriter (write(char[] cbuf,0,len) / flush()

三.案例

import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils;
import org.junit.Test;

import java.awt.geom.CubicCurve2D;
import java.io.*;
import java.nio.file.FileAlreadyExistsException;
import java.security.PublicKey;

public class Filetest {

    @Test // 读文件
    public void test1()  {
        FileReader fr = null;
        try{
        //1. 实例化File类的对象,指明要操作的文件
        File file = new File("test");
        //2. 提供具体的流
        fr = new FileReader(file);
        //3.数据的读入
        // read() 返回读入的一个字符,如果达到文件的尾部,返回-1
        int data = fr.read();
        while (data !=-1){
            System.out.print((char)data);
            data = fr.read();
        }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            //4. 关闭文件
                if (fr !=null){
                    try {
                        fr.close();
                    }catch (IOException e) {
                        e.printStackTrace();
                    }
                }
        }

    }
    // 对read() 操作升级,使用read的重载方法
    @Test // 读文件
    public void test2(){
        FileReader fr = null;
        try {
            //1. 实例化File 类的对象,指明要操作的文件
            File file = new File("test2");
            //2. 提供具体的文件流
            fr = new FileReader(file);
            //3. 读入操作
            // read(char [] cbuf) : 返回每次读入cbuf 数组中的字符的个数,如果达到文件末尾 返回-1
            char[] cbuf = new char[5];
            int len;
            while((len=fr.read(cbuf)) !=-1){
                String str = new String(cbuf,0,len);
                System.out.print(str);
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            // 关闭资源
            if(fr !=null){
                try{
                fr.close();
            }catch (IOException e){
                    e.printStackTrace();
            }
        }

        }

    }
    @Test //读写文件
    public void test3(){
        FileReader fr = null;
        FileWriter fw= null;
        // 读写文件
        //创建文件类对象
        try {
            File srcFile = new File("test");
            File destFile = new File("test3");
            //
            fr = new FileReader(srcFile);
            fw = new FileWriter(destFile);
            // 读取原文件写入到另一个文件
            char [] cbuf = new char [10];
            int len;
            while ((len = fr.read(cbuf)) !=-1){
                fw.write(cbuf,0,len);
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            // 关闭文件
            if (fr !=null){
                try {
                    fr.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
            if (fw !=null){
                try {
                    fw.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }
    }
    @Test//字节流方式读取文件
    public void test4(){
        FileInputStream fis = null;
        try {
            // 1. 造文件
            File file = new File("1.png");
            //2. 造流
            fis = new FileInputStream(file);
            //3.
            byte[] bt = new byte[5];
            int len;
            while ((len=fis.read(bt)) !=-1){
                //
                String str = new String(bt,0,len);
                System.out.println(str);
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            // 关闭
            if(fis !=null){
                try {
                    fis.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }
    }
    @Test // 复制图片
    public void test5(){
        //
        FileInputStream fis =null;
        FileOutputStream fos =null;
        try{
            // 造文件
            File srcFile = new File("1.png");
            File descFile = new File("2.png");
            //造流
            fis = new  FileInputStream(srcFile);
            fos = new  FileOutputStream(descFile);
            //
            byte [] bt = new byte[1024];
            int len;
            while ((len=fis.read(bt))!=-1){
                fos.write(bt,0,len);
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            // 关闭操作
            if (fis !=null){
                try{
                    fis.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
            if (fos !=null){
                try{
                    fis.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }

    }
    public void copyFile(String srcPath,String descPath){

        FileInputStream fis =null;
        FileOutputStream fos =null;
        try{
            // 造文件
            File srcFile = new File(srcPath);
            File descFile = new File(descPath);
            //造流
            fis = new  FileInputStream(srcFile);
            fos = new  FileOutputStream(descFile);
            //
            byte [] bt = new byte[1024];
            int len;
            while ((len=fis.read(bt))!=-1){
                fos.write(bt,0,len);
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            // 关闭操作
            if (fis !=null){
                try{
                    fis.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
            if (fos !=null){
                try{
                    fis.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }

    }
}

 

posted @ 2020-08-09 19:56  冰底熊  阅读(22)  评论(0编辑  收藏  举报