Java IO流的读写操作(掌握)

输入输出流

 

 

 字节输入流 FileInputStream

/**
      * 标准 读取流
      */
     public static void test2() {
          
          File file = new File("test.txt");
          
          //创建 输入流
          InputStream is = null;
          try {
              //获取字节流
              is = new FileInputStream(file);
              int temp;//定义 接受每次 读取的 长度
              //循环 判断 为-1停止
              while ((temp = is.read()) != -1) {
                   //打印
                   System.out.print((char) temp);
              }
          } catch (Exception e) {
              e.printStackTrace();
          } finally {
              try {
                   if (is != null) {
                        //非空关闭资源
                        is.close();
                   }
              } catch (Exception e2) {
                   e2.printStackTrace();
              }
          }
     }
/**
* 批量 输入流读取 */ public static void test1() { // 创建源 File file = new File("test.txt"); InputStream is = null; // 创建输入流 try { is = new FileInputStream(file); // 读取 byte[] flush = new byte[10]; // 定义读取的缓冲容器 int len = -1; // 接受每次读取的长度 while ((len = is.read(flush)) != -1) { // 字节数 到 字符串 解码 ,每次在 容器 arr数组中 读取 0 到 len的长度. String str = new String(flush, 0, len); System.out.print(str); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (is != null) { // 非空关闭资源 is.close(); } } catch (Exception e2) { e2.printStackTrace(); } } }

 

字节输出流 FileIOutputStream

   /**
      * 批量 输出流读取
      */
     public static void test1() {
//         1.创建源文件
          File file = new File("text1.txt");
//         2.创建输出流
          OutputStream os = null;
          try {
//             3.操作流
              os = new FileOutputStream(file, true);//  true在后面追加内容
              String str = "IO is so easy!\r";
              byte[] bytes = str.getBytes(); //字符串到  字节数组  编码
              // 写入 字节从0 到该字节数组的长度
              os.write(bytes, 0, bytes.length);
              // 刷新
              os.flush();
          } catch (Exception e) {
              e.printStackTrace();
          } finally {
              try {
//                  4.释放资源
                   if (os != null) {
                        os.close();
                   }
              } catch (Exception e2) {
                   e2.printStackTrace();
              }
          }
     }

字节流对文件的Copy

/**
      *
      * @param srcPath 要复制的文件路径
      * @param destPath 复制到该文件中的路径
      */
     public static void copy(String srcPath, String  destPath) {
//         1.创建源文件
          File file = new File(srcPath); // 要复制的文件
          File dest = new File(destPath); // 复制到该文件中
//         2.创建输出流
          InputStream is = null;
          OutputStream os = null;
          try {
//             3.操作流
              // 输入流
              is = new FileInputStream(file);
              // 输出流
              os = new FileOutputStream(dest);// true在后面追加内容
              int len = 0;// 定义接受每次读取的文件长度
              byte[] flush = new byte[10];// 读取缓冲器
              while ((len = is.read(flush)) != -1) {
                   // 写入到该文件
                   os.write(flush, 0, len);
              }
              // 刷新
              os.flush();
              System.out.println("复制完毕");
          } catch (Exception e) {
              System.out.println("复制失败");
              e.printStackTrace();
          } finally {
              try {
//                  4.释放资源
                   if (os != null) {
                        os.close();
                   }
                   if (is != null) {
                        is.close();
                   }
              } catch (Exception e2) {
                   e2.printStackTrace();
              }
          }
     }

 


 

字符流对的文件copy的操作

    /**
      * 字符输出流
      */
     public static void test2() {
          File file = new File("dest1.txt");
          Writer fw = null;
          try {
              fw = new FileWriter(file);
              String str = "大家好,我是康纳\r哈哈";
              // 写法 1
//            char[] charArray = str.toCharArray(); //字符串到 字节数组
//            fw.write(charArray, 0, charArray.length);
              // 写法 2
//            fw.write(str);
              // 写法3
              fw.append("IO is so easy\r ").append("大家好我是康纳郭");
              fw.flush();
          } catch (Exception e) {
              e.printStackTrace();
          } finally {
              try {
                   if (fw != null) {
                        fw.close();
                   }
              } catch (Exception e2) {
                   e2.printStackTrace();
              }
          }
     }
     /**
      * 字符输入流
      */
     public static void test1() {
          File file = new File("test.txt");
          // 字符输入流
          Reader fr = null;
          try {
              fr = new FileReader(file);
              // 操作缓冲区
              char[] flush = new char[10];
              // 每次接受字符长度
              int len = -1;
              while ((len = fr.read(flush)) != -1) {
                   // 字符数组 到字符串
                   String str = new String(flush, 0,  len);
                   System.out.print(str);
              }
          } catch (Exception e) {
              e.printStackTrace();
          } finally {
              try {
                   // 关流
                   if (fr != null) {
                        fr.close();
                   }
              } catch (Exception e2) {
                   e2.printStackTrace();
              }
          }
     }
     /**
      * 字符流 文件的拷贝
      *
      * @param srcPath  要复制的文件
      * @param destPath 复制到该文件中
      */
     public static void copy(String srcPath, String  destPath) {
          // 创建源
          File src = new File(srcPath);
          File dest = new File(destPath);
          // 创建字符流
          Reader reader = null;
          Writer writer = null;
          try {
              reader = new FileReader(src);
              writer = new FileWriter(dest);
              int len = -1;// 每次读取的长度
              char[] flush = new char[2];// 缓冲器
//            int i = 0;
              while ((len = reader.read(flush)) != -1) {
//                 writer.write(i+" ");
                   writer.write(flush, 0, len);
//                 writer.write("\r\n");
              }
              writer.flush();// 刷新
          } catch (Exception e) {
              e.printStackTrace();
          } finally {
              // 关流
              try {
                   if (writer != null) {
                        writer.close();
                   }
                   if (reader != null) {
                        reader.close();
                   }
              } catch (Exception e2) {
                   e2.printStackTrace();
              }
          }
     }

 

字节数组流

字节数组输入流 ByteArrayInputStream

 /**
      * 字节数组输出流
      *
      * 创建源:内部维护
      * 选择流:不关联源
      * 操作:
      * 释放资源:不做处理
      */
     public static void byteArrayOutPut() {
          String str = "talk is cheap show me the code";
          
          byte arr [] =null;//用来接收读取的字节数组
          
          ByteArrayOutputStream baos = null;//使用子类特有的方法。不发生多态
          try {
              baos = new ByteArrayOutputStream();
              
              byte[] bytes = str.getBytes();// 字符串  ---->字节数组 编码
              //读取
              baos.write(bytes,0,bytes.length);
              //刷新
              baos.flush();
              
              //返回读取的字节数组
              arr = baos.toByteArray();
              
              System.out.println(arr.length);
              System.out.println(new  String(arr,0,baos.size()));
          } catch (Exception e) {
              e.printStackTrace();
          }
     }

 

文件的copy,对接流。图片读取字节数组中,字节数组写出到图片。

   /**
      * 图片转换 到 字节数组
      *   1. 图片到程序 FileInputStream
      *   2. 程序到字节数组: ByteArrayOutputStream
      */
     public static byte[] FileToBtyeArryay(String src) {
          // 创建源
          File file = new File(src);
          InputStream is = null;
          ByteArrayOutputStream baos = null;
          // 创建输入流
          try {
              is = new FileInputStream(file);
              baos = new ByteArrayOutputStream();
              // 读取
              byte[] flush = new byte[1024 * 10]; // 定义读取的缓冲容器
              int len = -1; // 接受每次读取的长度
              while ((len = is.read(flush)) != -1) {
                   baos.write(flush, 0, len); // 写入到字节数组
              }
              baos.flush();
              // 返回读取的字节数组
              return baos.toByteArray();
          } catch (Exception e) {
              e.printStackTrace();
          } finally {
              try {
                   if (is != null) {
                        // 非空关闭资源
                        is.close();
                   }
              } catch (Exception e2) {
                   e2.printStackTrace();
              }
          }
          return null;
     }
     /**
      * 字节数组转换到图片
      * 1.字节数组读取到程序  ByteArrayInpuStream
      *
      * 2.程序写出到文件 FileOutPutStream
      */
     public static void ByteArrayToFile(byte[] src,  String filePath) {
          //要读取到的文件路径
          File file = new File(filePath);
          //字节输入流
          InputStream bais = null;
          //文件输出流
          OutputStream os = null;
          try {
              bais = new ByteArrayInputStream(src);
              os = new FileOutputStream(file);
              
              int len = -1;
              byte[] flush = new byte[1024 * 2];
              while ((len = bais.read(flush)) != -1)  {//读取字节数组流
                   os.write(flush, 0, len);//写入到文件
              }
              os.flush();
          } catch (Exception e) {
              e.printStackTrace();
          }finally {
              try {
                   if(os!= null) {
                        os.close();
                   }
              } catch (Exception e2) {
                   e2.printStackTrace();
              }
          }
     }

 

重点

字节缓冲流

/**
      *
      *  加入 字节缓冲流
      * @param srcPath  要复制的文件路径
      * @param destPath 复制到该文件中的路径
      */
     public static void copy(String srcPath, String  destPath) {
//         1.创建源文件
          File file = new File(srcPath); // 要复制的文件
          File dest = new File(destPath); // 复制到该文件中
//         2.创建输出流
          // jdk1.7 try可自动关闭资源
          //加上字节缓冲流
          try (InputStream is =  new  BufferedInputStream(new FileInputStream(file));
                   OutputStream os = new  BufferedOutputStream(new FileOutputStream(dest))) {
              int len = 0;// 定义接受每次读取的文件长度
              byte[] flush = new byte[1024];// 读取缓冲器
              while ((len = is.read(flush)) != -1) {
                   // 写入到该文件
                   os.write(flush, 0, len);
              }
              // 刷新
              os.flush();
              System.out.println("复制完毕");
          } catch (Exception e) {
              System.out.println("复制失败");
              e.printStackTrace();
          }
     }

 


 

字符缓冲流

 

/**
      * 字符流 文件的拷贝+字符缓冲流
      *
      * @param srcPath  要复制的文件
      * @param destPath 复制到该文件中
      */
     public static void copy(String srcPath, String  destPath) {
          // 创建源
          File src = new File(srcPath);
          File dest = new File(destPath);
          //缓冲流
          try (BufferedReader br = new BufferedReader(new  FileReader(src));
                   BufferedWriter bw = new  BufferedWriter(new FileWriter(dest))) {
              //一次读一行
              String line = null;
              while ((line = br.readLine()) != null) {
                   bw.write(line);
                   bw.newLine();//换行
              }
              bw.flush();// 刷新
          } catch (Exception e) {
              e.printStackTrace();
          }
     }

 

工具类的CommonsIO使用

FileUtils:工具类

//文件大小
          long sizeOf = FileUtils.sizeOf(new  File("src/com/gskj/commons/CommonsTest01.java"));
          System.out.println(sizeOf);
          //目录大小
          sizeOf = FileUtils.sizeOf(new  File("D:\\software\\JavaWebTools\\SpringEclipse-workspace\\IO_Study03"));
          System.out.println(sizeOf);


//打印子孙级目录
          Collection<File> listFiles =  FileUtils.listFiles(
                   new  File("D:/software/JavaWebTools/SpringEclipse-workspace/IO_Study03")
                   ,  EmptyFileFilter.NOT_EMPTY,DirectoryFileFilter.INSTANCE );
//        for (File file : listFiles) {
//            System.out.println(file.getAbsolutePath());
//        }
          
          //文件过滤
          //文件后缀为 .java
          Collection<File> listFiles2 =  FileUtils.listFiles(
                   new  File("D:/software/JavaWebTools/SpringEclipse-workspace/IO_Study03")
                   , new  SuffixFileFilter("java"),DirectoryFileFilter.INSTANCE );
//        for (File file : listFiles2) {
//            System.out.println(file.getAbsolutePath());
//        }
          
          //文件后缀为 .java .class
          Collection<File> listFiles3 =  FileUtils.listFiles(
                   new  File("D:/software/JavaWebTools/SpringEclipse-workspace/IO_Study03")
                   , FileFilterUtils.or(new  SuffixFileFilter("java"),new  SuffixFileFilter("class")),DirectoryFileFilter.INSTANCE  );
          for (File file : listFiles3) {
              System.out.println(file.getAbsolutePath());
          }


//从文件中读取内容
          String msg = FileUtils.readFileToString(new  File("commons.txt"),"utf-8");
          System.out.println(msg);
          
          //逐行读取
          List<String> readLines = FileUtils.readLines(new  File("commons.txt"),"utf-8");
          for (String string : readLines) {
              System.out.println(string);
          }


//将指定类型的内容写出
          FileUtils.write(new File("write.txt"),"安徽山东i啊回到i傻傻的\r","utf-8");
          
          FileUtils.writeStringToFile(new  File("write.txt"), "安徽山东i啊回到i傻傻的\r",  "utf-8",true);
          
          FileUtils.writeByteArrayToFile(new  File("write.txt"), "安徽山东i啊回到i傻傻的".getBytes("utf-8"),true);


//复制文件
          //FileUtils.copyFile(new File("gtaf2.jpg"), new  File("gtaf2_1.jpg"));
          //复制文件到目录
          //FileUtils.copyFileToDirectory(new  File("gtaf2.jpg"), new File("lib"));
          
          //copy URL内容
          String url  ="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1585912570744&di=bd41c4491cb14ed82a5e3bb0f2ceb78c&imgtype=0&src=http%3A%2F%2Fa4.att.hudong.com%2F21%2F09%2F01200000026352136359091694357.jpg";
          FileUtils.copyURLToFile(new URL(url ), new  File("copy.jpg"));

 

posted @ 2020-07-17 18:54  郭宗鑫  阅读(531)  评论(0编辑  收藏  举报