Java IO流 复制图片

(一)使用Java IO字节流复制图片

//字节流方法
    public static void copyFile()throws IOException {
       
        //1.获取目标路径
        //(1)可以通过字符串
//        String srcPath = "C:\\Users\\linuxidc\\Desktop\\截图笔记\\11.jpg";
//        String destPath = "C:\\Users\\linuxidc\\Desktop\\图片备份\\11.jpg";
       
        //(2)通过文件类
        File srcPath = new File("C:\\Users\\linuxidc\\Desktop\\截图笔记\\22.PNG");
        File destPath = new File("C:\\Users\\linuxidc\\Desktop\\图片备份\\22.PNG");
       
        //2.创建通道,依次 打开输入流,输出流
        FileInputStream fis = new FileInputStream(srcPath);
        FileOutputStream fos = new FileOutputStream(destPath);

byte[] bt = new byte[1024];
       
        //3.读取和写入信息(边读取边写入)
        while (fis.read(bt) != -1) {//读取
            fos.write(bt);//写入
        }

//4.依次 关闭流(先开后关,后开先关)
        fos.close();
        fis.close();
    }

(二)使用字符流复制文件

//字符流方法,写入的数据会有丢失
    public static void copyFileChar()throws IOException {
       
        //获取目标路径
        File srcPath = new File("C:\\Users\\linuxidc\\Desktop\\截图笔记\\33.PNG");
        File destPath = new File("C:\\Users\\linuxidc\\Desktop\\图片备份\\33.PNG");
       
        //创建通道,依次 打开输入流,输出流
        FileReader frd = new FileReader(srcPath);
        FileWriter fwt = new FileWriter(destPath);

char[] ch = new char[1024];
        int length = 0;
        // 读取和写入信息(边读取边写入)
        while ((length = frd.read(ch)) != -1) {//读取
            fwt.write(ch,0,length);//写入
            fwt.flush();
        }

// 依次 关闭流(先开后关,后开先关)
        frd.close();
        fwt.close();
    }

(三)以复制图片为例,实现抛出异常案例

//以复制图片为例,实现try{ }cater{ }finally{ } 的使用
        public static void test(){
            //1.获取目标路径
            File srcPath = new File("C:\\Users\\linuxidc\\Desktop\\截图笔记\\55.PNG");
            File destPath = new File("C:\\Users\\linuxidc\\Desktop\\图片备份\\55.PNG");
            //2.创建通道,先赋空值
            FileInputStream fis = null;
            FileOutputStream fos = null;
            //3.创建通道时需要抛出异常
            try {
                fis = new FileInputStream(srcPath);
                fos = new FileOutputStream(destPath);
               
                byte[] bt = new byte[1024];
                //4.读取和写入数据时需要抛出异常
                try {
                    while(fis.read(bt) != -1){
                        fos.write(bt);
                    }
                } catch (Exception e) {
                    System.out.println("储存盘异常,请修理");
                    throw new RuntimeException(e);
                }
               
               
            } catch (FileNotFoundException e) {
                System.out.println("资源文件不存在");
                throw new RuntimeException(e);
            }finally{
               
                //5.无论有无异常,需要关闭资源(分别抛出异常)
                try {
                    fos.close();
                } catch (Exception e) {
                    System.out.println("资源文件或目标文件关闭失败!");
                    throw new RuntimeException(e);
                }
               
                try {
                    fis.close();
                } catch (IOException e) {
                    System.out.println("资源文件或目标文件关闭失败!");
                    throw new RuntimeException(e);
                }
               
            }
        }

字符流  =  字节流 + 解码 --->找对应的码表  GBK

字符流解码 : 拿到系统默认的编码方式来解码

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/052bea5d8bb093b4eb3b204929ccf8c1.html