Java

Java 21-1 IO技术输出输入流(缓冲 异常处理)

2019-01-29  本文已影响0人  第二套广播体操

需求:
怎么操作文件数据
使用io流对象 而且文件数据都是字节存在
学习了可以操作文件的字节流
out是写入文件 in是读入内存
OutPutStream
|--FileOutPutStream


FileOutPutStream方法

InPutStream
|--FilePutStream


FileInPutStream方法

为了提高操作效率引用缓冲区
OutPutStream
|--FileOutPutStream
|--FilterOutPutStream
|--BufferedOutPutStream


父类方法

InPutStream
|--FileInPutStream
|--FilterInPutStream
|--BufferedInPutStream


父类方法

FileOutPutStream
创建字节输出流对象,用于操作文件,在对象初始化时,必须明确数据存储的目的地

 FileOutputStream fos=new FileOutputStream("D:\\实验1\\test1.txt",true);

true为打开 append的续写功能 防止每一次写入文件都被重新覆盖
例:

public class FileOutPutStream_Test1 {
    public static void main(String[] args) throws IOException {
        File file=new File("D:\\实验1");//D:冒号
        if (!file.exists())
        { file.mkdir();}
//            file.createNewFile();这个是创建文件 我们要创建文件夹

        FileOutputStream fos=new FileOutputStream("D:\\实验1\\test1.txt",true);
//        续写
        String s=System.lineSeparator()+"abcds";
//        Sys系统分割符是String类型
        byte[] b=s.getBytes();
        fos.write(b);
//        释放资源
        fos.close();
    }
}

获取一个想要的指定文件的集合 获取文件下(包含子目录)的所有.java文件对象 并储存到集合中
* 思路:
* 1.包含子目录 需要递归
* 2.在递归中需要过滤器
* 3。满足条件 都添加到集合中

public class FileOutPutStream_Test2 {
    public static void main(String[] args) {

        File file=new File("D:\\it");
        List<File> list=fileList(file);
        for (File f:
             list) {
            System.out.println(f);
        }


    }
    public static List<File> fileList(File file){
        List<File> list=new ArrayList<>();
        FileFilter filter=new FilFilterBySuffix(".java");
//        过滤器
        getJavaList(file,list,filter);
        return list;
    }
    /*
     定义一个获取指定过滤器条件的文件集合
     dir 文件目录
     al  集合
     filter 过滤器
     多级目录下要使用相同的集合和过滤器那么不要在递归方法中定义 要不断的传递
     */
    public static void getJavaList(File dir, List<File> list, FileFilter filter) {
        /*
        * 通过listFile方法 获取所有当前文件下的文件和文件夹对象*/
        File[] files=dir.listFiles();
//        如果是文件夹 就递归 如果不是就进行过滤器过滤
        for (File f :
                files) {
            if (f.isDirectory())
                getJavaList(f,list,filter);
            else {
                if(filter.accept(f))
//                调用过滤器方法
                {list.add(f);}
//                添加到集合中
            }
        }
    }

}

过滤器

public class FilFilterBySuffix implements FileFilter {
    private String suffix;

    public FilFilterBySuffix(String suffix) {
        this.suffix = suffix;
    }

    @Override
    public boolean accept(File pathname) {
        return pathname.getName().endsWith(suffix);
    }
}

异常处理

public class IoExceptionDemo_Test {
    public static void main(String[] args) {
        FileOutputStream fos=null;
        try {
          fos = new FileOutputStream("实验1\\1.txt");
            fos.write("asada".getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(fos!=null)//一定要加判断 数据库释放资源前判断
            try {
                //如果没有成功创建对象 那么fos=null;finally一定运行 所以没有办法调用close();
//                造成NullPointerException 空指针异常
                fos.close();
            } catch (IOException e) {
              throw new RuntimeException("e");
            }
        }
    }
}

FileInPutStream

public class FileInPutStream_Test1 {
    public static void main(String[] args) {
        File file=new File("D:\\实验1\\test1.txt");
        FileInputStream fis=null;
        try {
            fis=new FileInputStream(file);
            byte[] buf=new byte[fis.available()];
//            文件大小一样的缓冲区
            fis.read(buf);
            System.out.println(new String(buf));
        }catch (IOException e){

        }finally {
            if (fis!=null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    throw new RuntimeException("不好使");
                }
            }
        }
    }
}

复制文件

public class FileInPutStream_Test2 {
    public static void main(String[] args) {
        copyPictureByBuf();
    }

    private static void copyPictureByBuf() {
        FileInputStream fis=null;
        FileOutputStream fos=null;
        try {
            fis=new FileInputStream("D:\\PanDownload.rar");
            fos=new FileOutputStream("D:\\PanDownload123.rar");
            byte[] bytes=new byte[1024];
            int len=0;
            while ((len=fis.read(bytes))!=-1)
                fos.write(bytes,0,len);

        }catch (IOException io){
//           异常日志
        }
        finally {
            if (fis!=null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fos!=null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

BufferedOutputStream
BufferedInputStream
缓冲器

public class BufferStream_Test {
    public static void main(String[] args) {
        coppyByRar();
    }

    private static void coppyByRar() {
       InputStream ips=null;
        OutputStream ops=null;
        BufferedInputStream bis=null;
        BufferedOutputStream bos=null;

        try {
            ips=new FileInputStream("D:\\PanDownload.rar");
            ops=new FileOutputStream("D:\\PanDownload789.rar");
            bis=new BufferedInputStream(ips);
            bos=new BufferedOutputStream(ops);
           byte[] buf=new byte[2048];
           int len;
            while ((len=bis.read(buf))!=-1)
//                将文件按字节的形式读入到buf中
                bos.write(buf,0,len);

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ips!=null) {
                try {
                    ips.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (ops!=null) {
                try {
                   ops.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读