InputStreamReader是从字节流到字符流的桥梁,它读取字节并使用指定的字符集将其解码为字符,通常将InputStreamReader包装在BufferedReader中使用。PrintStream为另一个输出流添加了功能,即方便地打印各种数据。


目录

  • 一、转换流
  • 二、打印流
  • 三、使用打印流完成文件复制

一、转换流


/*
* 转换流
*   输入流:InputStreamReader,将字节输入流转换成字符输入流
*   输出流:OutputStreamWriter,将字节输出流转换成字符输出流
*   特点:字节流向字符流转换
*
* 构造方法:
*   InputStreamReader(InputStream in): 创建一个使用默认字符集的对象
*   InputStreamReader(InputStream in, Charset cs):创建使用给定字符集的对象
*   InputStreamReader(InputStream in, CharsetDecoder dec):创建使用给定字符集解码器的对象
*   InputStreamReader(InputStream in, String charsetName):创建使用指定字符集的对象
*
* 常用方法:
*   void close(): 关闭流释放资源
*   String getEncoding(): 返回此流使用的字符编码的名称
*   int read(): 读取的单个字符
*   int read(char[] cbuf, int offset, int length): 将字符读入数组中的一部分
*   boolean ready(): 判断此流是否已经准备好用于读取
* */

public class _01_InputStreamReader {public static void main(String[] args) {try (// 创建字节输入流对象FileInputStream fis = new FileInputStream("./SE/src/com/tianl/IO/_01_FileInputStream/_03_IO_FileInputStream.java");// 创建转换流对象,把字节流传入,转换为字符流InputStreamReader isr = new InputStreamReader(fis);// 创建字符缓冲流,把转换流传入BufferedReader br = new BufferedReader(isr)){// 读取一行System.out.println(br.readLine());// 循环读取String temp = null;while ((temp= br.readLine())!=null){System.out.println(temp);}} catch (Exception e){e.printStackTrace();}}
}

二、打印流


/*
* 打印流:打印流是输出最方便的类
*   字节打印流:PrintStream,是OutputStream的子类。把一个输出流的实例传递到打印流之后
*       可以更加方便的输出,相当于把输出流重新包装了一下
*       该类中的print()方法被重载了很多次,根据参数的不同有不同的输出
*   字符打印流:PrintWriter
*
* 标准输入/输出
*   java的标准输入/输出分别通过System.in和System.out来表示,默认代表键盘和显示器
*   当程序通过System.in类获得输入时,时通过键盘获取。
*   当程序通过System.out类执行输出时,总是输出到屏幕。
*
* System类中提供了三个重定向标准输入/输出方法
*   static void setErr(PrintStream err),重定向”标准“错误输出流
*   static void setIn(PrintStream in),重定向”标准“输入流
*   static void setOut(PrintStream out),重定向”标准“输出流
* */

public class _01_PrintStream {public static void main(String[] args) throws FileNotFoundException {// 标准打印流,打印到控制台System.out.println("今天天气好吗");// 保存标准打印流对象PrintStream control = System.out;System.out.println(control);// 创建输出流FileOutputStream fos = new FileOutputStream("D:/log.txt");// 创建打印流,并传入输出流PrintStream ps = new PrintStream(fos);// 调用打印方法,打印到指定文件ps.println("日志系统111");// 设置System中的outSystem.setOut(ps);// 设置System中的out后,在使用打印语句,会打印到指定文件// 设置打印到指定文件后,如何在设置打印到控制台?// 先保存标准输出流对象,指定打印到文件使用结束后可根据标准输出流对象重新设置System.out.println("hahahhhahh----------");SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");System.out.println("test方法开始执行:"+simpleDateFormat.format(new Date()));test();System.out.println("test方法执行结束:"+simpleDateFormat.format(new Date()));// 重设置会控制台输出System.setOut(control);System.out.println("重新设置完成");}public static void test(){System.out.println("test方法执行!");}
}

三、使用打印流完成文件复制


/*
* 使用打印流完成文件复制
*   实例:将D:/111.txt文件 复制到 D:JavaTest/111.txt
*   1 复制:就只输入和输出
*   2 先获取数据
*   3 再输出数据
* */
public class _02_PrintStreamTest {public static void main(String[] args) {try (FileInputStream fis = new FileInputStream("D:/111.txt");FileOutputStream fos = new FileOutputStream("D:/JavaTest/111.txt");PrintStream ps = new PrintStream(fos);){byte[] bytes = new byte[1024];int temp;while ((temp=fis.read(bytes))!=-1){ps.println(new String(bytes,0,temp));}} catch (Exception e){e.printStackTrace();}}
}
扩展:非打印流实现 压缩包复制
/** D盘下一个压缩包test.zip* 使用程序复制到另一个文件夹D:/JavaTest* 非打印流实现*   1 复制:就只输入和输出*   2 先获取数据*   3 在输出数据* */
public class CopyTest2 {public static void main(String[] args) {try (FileInputStream fis = new FileInputStream("D:/test1.zip");BufferedInputStream bis = new BufferedInputStream(fis);FileOutputStream fos = new FileOutputStream("D:/JavaTest/test1.zip");BufferedOutputStream bos = new BufferedOutputStream(fos)){byte[] bytes = new byte[1024];int temp;while ((temp= bis.read(bytes))!=-1){bos.write(bytes,0,temp);}bos.flush();System.out.println("完成");} catch (Exception e){e.printStackTrace();}}
}
扩展:zip流实现
/*
* D盘下一个压缩包test.zip,压缩包中默认无下级目录
* 使用程序复制到另一个文件夹D:/JavaTest
* 非打印流实现
*   1 复制:就只输入和输出
*   2 先获取数据
*   3 在输出数据
* */
public class CopyTest {public static void main(String[] args) throws IOException {try (FileInputStream fis = new FileInputStream("D:/test.zip");FileOutputStream fos = new FileOutputStream("D:/JavaTest/test.zip");// zip输入流,传入文件输入流ZipInputStream zis = new ZipInputStream(fis);// zip输出流,传入文件输出流ZipOutputStream zos = new ZipOutputStream(fos)){// zip压缩包中子文件ZipEntry entry = null;while ((entry= zis.getNextEntry())!=null){// 子文件文件名String name = entry.getName();// 子文件非目录if (!entry.isDirectory()){// zip输出流中设置文件名zos.putNextEntry(new ZipEntry(name));int temp;byte[] bytes = new byte[1024];// zip输出流读取byteswhile ((temp=zis.read(bytes))!=-1){// zip输出流写入zos.write(bytes,0,temp);}}}System.out.println();} catch (Exception e){e.printStackTrace();}}
}

Java中IO(三、转换流与打印流)相关推荐

  1. 一文读懂Java中File类、字节流、字符流、转换流

    一文读懂Java中File类.字节流.字符流.转换流 第一章 递归:File类: 1.1:概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. ...

  2. JAVA IO流(内存流、管道流、打印流)

    1.内存操作流 2.管道流 3.字节.字符转换流 4.字符的编码问题 5.打印流 6.System类对IO的支持 7.对象序列化 内存操作流 FileInputStream 和FileOutputSt ...

  3. JAVA File类、IO流体验与简介(字节流、字符流、序列流、打印流、编码、递归)

    1. File类 1.1. File类说明 存储在变量,数组和对象中的数据是暂时的,当程序终止时他们就会丢失.为了能够永 久的保存程序中创建的数据,需要将他们存储到硬盘或光盘的文件中.这些文件可以移动 ...

  4. Java中IO流的总结

    有关Java中IO流总结图 流分类 按方向分 输入流 输出流 按单位分 字节流 字符流 按功能分 节点流 处理流(过滤流) 其他 所有的流继承与这四类流:InputSteam.OutputStream ...

  5. Java中IO流体系

    转载: https://mp.weixin.qq.com/s?__biz=MzA5NzgzODI5NA==&mid=2454030958&idx=1&sn=df27aadb92 ...

  6. Java中IO流,输入输出流概述与总结(转载自别先生文章)

    Java中IO流,输入输出流概述与总结 总结的很粗糙,以后时间富裕了好好修改一下. 1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中.其中, 所有输入流类都 ...

  7. java中IO流体系以及常用实现类

    一.体系   分为字节流和字符流,也可以说是分为输入流和输出流.字节流InputStream,OutputStream以字节形式操作二进制文件非常合适.字符流Writer和Reader操作文本比较适宜 ...

  8. 【Java网络编程与IO流】Java中IO流分为几种?字符流、字节流、缓冲流、输入流、输出流、节点流、处理流

    Java网络编程与IO流目录: [Java网络编程与IO流]Java中IO流分为几种?字符流.字节流.缓冲流.输入流.输出流.节点流.处理流 [Java网络编程与IO流]计算机网络常见面试题高频核心考 ...

  9. java 中 IO 的流的种类及BIO、NIO、AIO 有什么区别?

    文章目录 java 中 IO 流分为几种? BIO.NIO.AIO 有什么区别? java 中 IO 流分为几种? (1)按流划分,可以分为输入流和输出流: (2)按单位划分,可以分为字节流和字符流: ...

最新文章

  1. html旋转墙壁效果,css3实现照片墙效果,鼠标悬浮时旋转放大并摆正
  2. Object 转 String
  3. 计算机科学与编程基础,国外经典教材·计算机科学与技术:Oracle 10g编程基础
  4. boost::mpl模块实现quote相关的测试程序
  5. Hadoop快速入门——第一章、认识Hadoop
  6. 在SAP云平台测试帐号中启用Kyma运行环境
  7. C#3.0 Sepcification(中英文对照) (转)
  8. C++中的4种类型转换方式
  9. 为什么MediaPlayer中onCompletion()每次播放音频时都触发?
  10. 苹果留给 iOS 开发者的时间不多了:30 天内必须更新旧版本
  11. 洛谷——P1089 [NOIP2004 提高组] 津津的储蓄计划
  12. bzoj 3404: [Usaco2009 Open]Cow Digit Game又见数字游戏(SG函数)
  13. 理解图像中的低频分量和高频分量
  14. PAT (Advanced Level) Practice 1001 A+B Format (20分)
  15. windows 启动c\windows\systen32\spool\DRIVERS\W32x86\3\ssnetmon. dll 时出现问题 找不到指定模块
  16. python学习视频
  17. 使用Xavier读取RealSense D435i的踩坑经历
  18. android应用开发-从设计到实现 2-4 文字的使用
  19. 金融财务英译汉常用词怎样翻译
  20. [高通MSM8953_64][Android10]解决制作差分包不生成system_manifest.xml的问题

热门文章

  1. 全国三级地区(省市县)数据表设计
  2. 关于未来人工智能时代的一点感想
  3. c语言单片机程序设计例,51单片机C语言程序设计经典实例(第2版)
  4. Android进阶之光 读书笔记
  5. python中的values函数_Pandas之排序函数sort_values()的实现
  6. merge和AMVP
  7. 2.6java基础 数组
  8. W806 基于Arduino开发的GPIO操作示例,勇于尝新
  9. 深入理解L0,L1和L2正则化
  10. Gitlab 访问报错403 Forbidden