Java中IO(三、转换流与打印流)
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(三、转换流与打印流)相关推荐
- 一文读懂Java中File类、字节流、字符流、转换流
一文读懂Java中File类.字节流.字符流.转换流 第一章 递归:File类: 1.1:概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. ...
- JAVA IO流(内存流、管道流、打印流)
1.内存操作流 2.管道流 3.字节.字符转换流 4.字符的编码问题 5.打印流 6.System类对IO的支持 7.对象序列化 内存操作流 FileInputStream 和FileOutputSt ...
- JAVA File类、IO流体验与简介(字节流、字符流、序列流、打印流、编码、递归)
1. File类 1.1. File类说明 存储在变量,数组和对象中的数据是暂时的,当程序终止时他们就会丢失.为了能够永 久的保存程序中创建的数据,需要将他们存储到硬盘或光盘的文件中.这些文件可以移动 ...
- Java中IO流的总结
有关Java中IO流总结图 流分类 按方向分 输入流 输出流 按单位分 字节流 字符流 按功能分 节点流 处理流(过滤流) 其他 所有的流继承与这四类流:InputSteam.OutputStream ...
- Java中IO流体系
转载: https://mp.weixin.qq.com/s?__biz=MzA5NzgzODI5NA==&mid=2454030958&idx=1&sn=df27aadb92 ...
- Java中IO流,输入输出流概述与总结(转载自别先生文章)
Java中IO流,输入输出流概述与总结 总结的很粗糙,以后时间富裕了好好修改一下. 1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中.其中, 所有输入流类都 ...
- java中IO流体系以及常用实现类
一.体系 分为字节流和字符流,也可以说是分为输入流和输出流.字节流InputStream,OutputStream以字节形式操作二进制文件非常合适.字符流Writer和Reader操作文本比较适宜 ...
- 【Java网络编程与IO流】Java中IO流分为几种?字符流、字节流、缓冲流、输入流、输出流、节点流、处理流
Java网络编程与IO流目录: [Java网络编程与IO流]Java中IO流分为几种?字符流.字节流.缓冲流.输入流.输出流.节点流.处理流 [Java网络编程与IO流]计算机网络常见面试题高频核心考 ...
- java 中 IO 的流的种类及BIO、NIO、AIO 有什么区别?
文章目录 java 中 IO 流分为几种? BIO.NIO.AIO 有什么区别? java 中 IO 流分为几种? (1)按流划分,可以分为输入流和输出流: (2)按单位划分,可以分为字节流和字符流: ...
最新文章
- html旋转墙壁效果,css3实现照片墙效果,鼠标悬浮时旋转放大并摆正
- Object 转 String
- 计算机科学与编程基础,国外经典教材·计算机科学与技术:Oracle 10g编程基础
- boost::mpl模块实现quote相关的测试程序
- Hadoop快速入门——第一章、认识Hadoop
- 在SAP云平台测试帐号中启用Kyma运行环境
- C#3.0 Sepcification(中英文对照) (转)
- C++中的4种类型转换方式
- 为什么MediaPlayer中onCompletion()每次播放音频时都触发?
- 苹果留给 iOS 开发者的时间不多了:30 天内必须更新旧版本
- 洛谷——P1089 [NOIP2004 提高组] 津津的储蓄计划
- bzoj 3404: [Usaco2009 Open]Cow Digit Game又见数字游戏(SG函数)
- 理解图像中的低频分量和高频分量
- PAT (Advanced Level) Practice 1001 A+B Format (20分)
- windows 启动c\windows\systen32\spool\DRIVERS\W32x86\3\ssnetmon. dll 时出现问题 找不到指定模块
- python学习视频
- 使用Xavier读取RealSense D435i的踩坑经历
- android应用开发-从设计到实现 2-4 文字的使用
- 金融财务英译汉常用词怎样翻译
- [高通MSM8953_64][Android10]解决制作差分包不生成system_manifest.xml的问题