美文网首页Java
Java 21-1 IO技术输出输入流(缓冲 异常处理)

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

作者: 第二套广播体操 | 来源:发表于2019-01-29 11:48 被阅读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();
                }
            }
        }
    }
}

相关文章

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

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

  • Ninetheen Day(IO基本概念)

    输入流:进入Java程序里面输出流:从Java程序输出 inputstream:输入流outputstream:输...

  • IO 概述

    对于java来说输入输出问题,java见它抽象成流对象来解决. IO流在java中从输入输出角度分类: 输入流 输...

  • Java中的IO流的简单介绍

    IO流用来处理设备之间的数据传输。 输出流: FileWriter 输入流: FileReader java.io...

  • IO

    IO文件读写 输入流输出流字节流字节输入流 InputStream字节输出流 OutputStream字符流字符输...

  • 系统学习 Java IO (十五)----字符读写 Reader

    目录:系统学习 Java IO---- 目录,概览 跟踪行号的缓冲字符输入流 LineNumberReader L...

  • [java]13、缓冲流

    1、字节缓冲输出流 java.io.BufferedOutputStream extends OutputStre...

  • 28、说说Java 中 IO 流

    说说Java 中 IO 流 Java 中 IO 流分为几种? 1、按照流的流向分,可以分为输入流和输出...

  • Java装饰器模式,从IO流讲起

    从Java IO流讲起 在java中, 字节输入流InputStream和字节输出流OutputStream, 文...

  • IO系统

    IO流简单来说就是输入流和输出流。,IO流主要是用来处理设备之间的数据传输,Java对于数据的操作都是通过流实现,...

网友评论

    本文标题:Java 21-1 IO技术输出输入流(缓冲 异常处理)

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