当前位置:   article > 正文

java对文件内容操作 -- 输入输出流_java pdfpage转输入流

java pdfpage转输入流

目录

InputStream(输入字节流)和OutputStream(输出字节流)

Reader(字符输入流)与Writer(字符输出流)

Print 流


我们通过对File类的学习, 了解到File类并不能去操作文件的内容,可以操作文件内容的则是以下这些实现类,现在来一一介绍

InputStream(输入字节流)和OutputStream(输出字节流)

      在谈这两个类之前,我们先来聊聊,什么是输入和输出呢 , 简单理解的话,我们编写的程序就相当于一个中转站, 首先将一个文件的内容输入进来, 然后再通过中转站将内容输出到另一个文件上,那么在这个基础之上呢 , 我们将要介绍的inputStream与OutputStream就相当于两段传输的管道, 起到传输字节的作用,如下图

需要注意的是, InputStream与OutputStream是抽象类

最终的实现类我们用的是 FileInputStream 与 FileOutputStream , 先看示例,完整代码如下

  1. FileInputStream in = null; //字节输入流
  2. BufferedInputStream bin = null; //高效字节缓冲流
  3. FileOutputStream out = null; //字节输出流
  4. BufferedOutputStream bout = null; //高效字节输出流
  5. try {
  6. in = new FileInputStream("D:\\demo\\www.txt");
  7. bin = new BufferedInputStream(in); //用缓冲流包装包装
  8. out = new FileOutputStream("D:\\demo\\eee.txt");
  9. bout = new BufferedOutputStream(out);
  10. //定义一个缓冲数组,一次读入1024个字节
  11. byte[] bytes = new byte[1024];
  12. //length为实际读入byte[]数组的字节个数
  13. int length = 0;
  14. //read()方法读完之后会返回-1
  15. while ((length = bin.read(bytes))!=-1){
  16. //写出
  17. bout.write(bytes,0,length);
  18. }
  19. } catch (FileNotFoundException e) { //处理编译期异常
  20. e.printStackTrace();
  21. } catch (IOException e) {
  22. e.printStackTrace();
  23. } finally {
  24. // 关闭管道
  25. try {
  26. if (bin != null){
  27. bin.close();
  28. }
  29. if (bout != null){
  30. bout.flush(); //刷新缓冲区
  31. bout.close();
  32. }
  33. }catch (IOException e){
  34. e.printStackTrace();
  35. }
  36. }

原文件 : 

执行后目标文件 : 

       需要注意的几点是, 如果我们输出的目标文件不存在的话,那么java是会去自动创建这个文件的,但是不能创建文件夹 , 并且在上述代码中,采用了缓冲数组和高效缓冲流(BufferedInputStream与BufferedOutputStream)的做法 , 这样做的好处是大大提升了效率

高效缓冲流的底层做法其实也是提供了缓存数组

      试想,原本的字节流一次读一个字节,然后将它写出去,每次读一个效率未免太低,所以我们采用了缓冲数组的做法, 让它一次读入一定数量的字节,然后再去处理它,这样提升了效率

Reader(字符输入流)与Writer(字符输出流)

     有了字节流, 那么也会有字符流, 顾名知义, 字节流每次会读入一个字节,而字符流每次则会读入一个字符, 采用utf-8的编码规范 , 一个英文字母就是一个字节, 一个汉字则是三个字节, 但它们都是一个字符, 字符流每次会读入一个完整的字符

另外,这两个类也是抽象类, 我们实现用的是FileReader与FileWriter这两个实现类

代码如下:

  1. FileReader in = null;
  2. FileWriter out = null;
  3. BufferedReader bin = null;
  4. BufferedWriter bout = null;
  5. try {
  6. in = new FileReader("D:\\demo\\www.txt");
  7. bin = new BufferedReader(in);
  8. // 构造方法中将append属性设置为:true 不会替换原来的文件内容
  9. out = new FileWriter("D:\\demo\\eee.txt",true);
  10. bout = new BufferedWriter(out);
  11. String str = null;
  12. while ((str = bin.readLine()) != null){
  13. bout.write(str);
  14. bout.newLine(); //换行
  15. }
  16. } catch (Exception e) {
  17. e.printStackTrace();
  18. } finally {
  19. try {
  20. bin.close();
  21. bout.flush();
  22. bout.close();
  23. } catch (IOException e) {
  24. e.printStackTrace();
  25. }
  26. }

 上述代码可将以下文件完整的输出到另一文件中

字符流为何能辨别我们读入的是一个正确的字符呢 , FileReader类继承了 InputStreamReader类,这个类又称为转换流, 它是字节流到字符流之间的桥梁

Print 流

这里我们主要介绍PrintWriter流(字符打印流) , 我们一般在javaEE程序中用到 , 例 :

  1. try {
  2. PrintWriter out = new PrintWriter("D:\\demo\\asd.html");
  3. out.println("<a href=''>超链接</a>"); //超链接标签, html语言
  4. out.close();
  5. } catch (FileNotFoundException e) {
  6. e.printStackTrace();
  7. }

结果 : 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/558988
推荐阅读
相关标签
  

闽ICP备14008679号