java SE 17 火推 IO流
来源:互联网 发布:藏宝库 源码代下载 编辑:程序博客网 时间:2024/06/05 21:04
SE 17
1. 接收输入2. 进行处理3. 输出给用户
输入流I与输出流O
这是一种相对的概念 :例如: 程序读取一段文件, 相对于程序而言, 在进行输入操作 但是相对于文件来说, 文件在向外写文字 , 在进行输出操作 ! 程序向本地文件 , 写出一段文字: 相对于程序而言, 在进行输出操作 相对于本地文件来说, 在进行输入操作站在程序员的 角度: 我们关注的是 当前程序的输入(读) / 输出(写)操作
流的分类
1. 读流Input / 写流Output *** 2. 字节(byte)流: *** 主要是对字节的输入输出操作, 输入: 顶级父: InputStream 输出: 顶级父: OutputStream3. 字符(char)流 *** 主要是对于字符的输入输出操作 输入: 顶级父: Reader 输出: 顶级父: Writer
OutputStream
void close() : 关闭流, 并释放占用的硬件资源 ! *****void flush() : 刷新管道, 并强制将缓冲管道中的数据 写出到一个接收器中 ! *****void write(int b): 每次写一个字节void write(byte[] bytes): 每次写一个字节数组void write(byte[] bytes,int startIndex,int endIndex): ***** 每次写一个字节数组中的一部分 . (指定开始下标和结束下标)
FileOutputStream
构造方法FileOutputStream(File file) ***** 创建一个指向指定文件的文件输出流! 默认不是追加模式! 参数1. 写流指向的文件 , 这个文件可以不存在, 会默认创建 ,但是文件夹必须存在 !FileOutputStream(File file,boolean append) ***** 创建一个指向指定文件的文件输出流! 可以指定是否追加 参数1. 写流指向的文件 , 这个文件可以不存在, 会默认创建 ,但是文件夹必须存在 ! 参数2. 是否采用追加模式, true表示采用FileOutputStream(String pathName) ***** 创建一个指向指定文件的文件输出流! 默认不是追加模式! 参数1. 写流指向的文件地址 , 这个文件可以不存在, 会默认创建 ,但是文件夹必须存在 !FileOutputStream(String pathName,boolean append) ***** 创建一个指向指定文件的文件输出流! 可以指定是否追加 参数1. 写流指向的文件地址 , 这个文件可以不存在, 会默认创建 ,但是文件夹必须存在 ! 参数2. 是否采用追加模式, true表示采用
写数据的三种方式
// 准备要写出的数据 byte[] bytes = "董飞对高帆说: 说好一起到白头, 你却偷偷染了头!!!".getBytes(); // 准备一个文件, 用来向其写数据 File file = new File("C:\\code\\code15\\code15_1\\day17_IODemo\\data\\demo1.txt"); //创建流 FileOutputStream fos = new FileOutputStream(file);
一次写一个字节 // 遍历数组一次写出一个字节 for (byte b : bytes) { fos.write(b); } fos.close();
一次写出一个字节数组 * 三种方式 * 写数据2. 一次写出一个字节数组 fos.write(bytes); fos.close();
一次写一个字节数组的一部分 ***** FileOutputStream fos = new FileOutputStream(file,true); * 三种方式 * 写数据3. 一次写出一个字节数组的一部分 fos.write(bytes,0,bytes.length/2); fos.close();
InputStream
输入流注意: 关于流的读取 , 因为我们不知道文件 或者 被读取的其他资源 具体的大小 , 那么就需要通过循环读取, 直到读取不到数据 一般在读取时, 表示读取到尾部的返回值为 : -1;void close() : 关闭输入流, 并释放资源! *****int read(): 一次读取一个字节, 并返回 , 读取到文件尾部返回-1int read(byte[] b) 一次读取一个字节数组的数据, 并存储到数组b中 , 返回读取的字节个数,读取到文件尾部返回-1 *****int read(byte[] b,int offIndex,int length) 参数1. 读取时数据存储的缓冲区 参数2. 读取时数据的偏移量 参数3. 读取的数据存储的最大下标 (个数)
读取的三种方式
1. 准备一个文件对象, 读取它 File file = new File("C:\\code\\code15\\code15_1\\day17_IODemo\\data\\demo1.txt");2. 准备一个字节数组, 用来存放读取的数据 byte[] bytes = new byte[(int) file.length()]; FileInputStream fis = new FileInputStream(file);
1. 一次读取一个字节数组 byte b = 0; int index = 0; //将所有的数据, 读取到内存中的byte数组中 while((b = (byte) fis.read())!=-1) { bytes[index] = b; index++; }
2. 一次读取一个字节数组 ***** int length = fis.read(bytes);
3. 一次读取一个字节数组,并指定长度 int length = fis.read(bytes,0,(int)file.length());
练习 ***
使用读流, 读取一个文件, 再通过写流, 将读取的数据 写入到另外一个文件夹, 文件名称保持一致!
Data流 熟练
具备读取和写入Java中基本数据类型的装饰流 ! 装饰流: 本身不具备读和写的能力, 只是用于基本流的装饰而已 !
把变量或对象存储到本地硬盘的操作 , 我们称其为数据的序列化操作 !DataOutputStream : 可以用来完成基本数据类型数据的序列化操作!DataInputStream : 可以用来完成基本数据类型数据的反序列化操作!
字符流
字符输出流 ***
Writer只要是字符流 , 都存在缓冲的概念,每次写数据 都需要flush 刷新缓冲区 !注意一点: 关闭流时, 会自动执行刷新操作 , 然后关闭 !
FileWriter *
构造方法
构造方法FileWriter(File file) 创建一个指向指定文件的文件字符输出流! 默认不是追加模式! 参数1. 写流指向的文件 , 这个文件可以不存在, 会默认创建 ,但是文件夹必须存在 !FileWriter(File file,boolean append) 创建一个指向指定文件的文件字符输出流! 可以指定是否追加 参数1. 写流指向的文件 , 这个文件可以不存在, 会默认创建 ,但是文件夹必须存在 ! 参数2. 是否采用追加模式, true表示采用FileWriter(String pathName) 创建一个指向指定文件的文件字符输出流! 默认不是追加模式! 参数1. 写流指向的文件地址 , 这个文件可以不存在, 会默认创建 ,但是文件夹必须存在 !FileWriter(String pathName,boolean append) 创建一个指向指定文件的文件字符输出流! 可以指定是否追加 参数1. 写流指向的文件地址 , 这个文件可以不存在, 会默认创建 ,但是文件夹必须存在 ! 参数2. 是否采用追加模式, true表示采用
常用方法
void write(String text); ***** 写一个字符串到文件中 void write(char[] cbuf) 写入字符数组。 void write(char[] cbuf, int off, int len) 写入字符数组的某一部分。 void write(int c) 写入单个字符。
字符输入流 Reader
FileReader 文件字符输入流
构造方法
FileReader(String fileName) 创建一个从指定文件路径中读取数据的 字符文件输入流FileReader(File file) 创建一个从指定文件中读取数据的 字符文件输入流
常用方法
close() 关闭并释放资源int read(); 读取一个字符int read(char[] chars) ; 一次读取一个char数组, 并返回读取的字符数量 *****int read(char[] chars, int startIndex,int endIndex): 一次读取一个char数组 , 并指定读取的范围 !
转换流***
用来将字节流转换为字符流的 操作 !在使用上, 除了构造方法中 需要传入基本流 和 字符集以外 , 其它地方与FileWriter 和 FileReader 完全一致 !下述的笔记, 就不再记录常用方法, 与FileWriter 和 FileReader 完全一致 !
转换输出流
OutputStreamWriter构造方法: OutputStreamWriter(OutputStream os); 根据传入的字节流, 按照系统默认的编码 转换为字符输出流! OutputStreamWriter(OutputStream os,String charset); 根据传入的字节流, 按照指定的编码 转换为字符输出流! 参数2. 指定的编码名称, 例如: UTF-8,GBK,ISO-8859-1
转换输入流
InputStreamReader构造方法: InputStreamReader(InputStream is); 根据传入的字节流, 按照系统默认的编码 转换为字符输入流! InputStreamReader(InputStream is,String charset); 根据传入的字节流, 按照指定的编码 转换为字符输入流! 参数2. 指定的编码名称, 例如: UTF-8,GBK,ISO-8859-1
特殊的字符流, 逐行读取 和 逐行打印 流 ! ***
BufferedReader (也称为: 缓冲读取流)
构造方法BufferedReader(Reader in) 创建一个使用默认大小输入缓冲区的缓冲字符输入流。 BufferedReader(Reader in, int sz) 创建一个使用指定大小输入缓冲区的缓冲字符输入流。
常用方法String readLine() : 读取一行数据 , 如果读取到文件尾部返回null
经典 字节转换后 逐行读取代码: BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("c:\\d.txt"))); /** * 上述三句代码的简写格式: */ String text = null; while((text = br.readLine())!=null) { System.out.println(text); System.out.println("------------------------"); }
PrintStream 和 PrintWriter (也称为 打印流)
构造方法: PrintStream/PrintWriter(File file) 创建具有指定文件且不带自动行刷新的新打印流。 PrintStream/PrintWriter(File file, String csn) 创建具有指定文件名称和字符集且不带自动行刷新的新打印流
作业
1. 实现文件的分割 , 将一个完整的大文件, 分割为n小份 , n的数量自己定! 要求: 文件分割后 , 再编写一个读取的文件, 将所有文件再还原为一个 ! 并且大小不能变化 , 还可以打开 ! 文件无要求, 可以是视频,图片,音乐,压缩包 ,安装包等2. 扩展: 实现学生管理系统, 并通过字符流, 将学生信息存储到本地硬盘中, 在程序每次启动时, 可以载入程序 !3. 闲着无聊的, 以上*n
阅读全文
0 0
- java SE 17 火推 IO流
- java se day12 火推
- java SE Day13 火推
- java SE day14 火推
- java SE day15火推
- java SE day16 火推
- java SE 18 火推
- java.se.io.1输入流
- java.se.io.2输出流
- java.se.io.5.字符输入流
- java.se.io.6.字符输出流
- java.se.io.7.缓冲处理流
- java.se.io.8.转换流
- java.se.io.10.data处理流
- Java SE之IO流家族
- 5 java se(5)----IO流
- Java Se----IO框架
- Java SE学习笔记-IO
- SDUT_3377_数据结构实验之查找五:平方之哈希表
- 6.3
- c++ 优先队列学习小记
- python爬虫学习
- POJ 1035 Spell checker (模拟)
- java SE 17 火推 IO流
- 实验二:命令行菜单小程序V1.0
- 图解:(调用.lib\.dll)vc2010搭载QT无法启动此程序因为计算机丢失qt5Widgetsddll
- 使用VBA把excel里所有sheets按顺序一次性copy到Word文档(选定特定列)
- 开启nginx目录文件列表显示功能
- 链表——单链表的基本运算
- 嫌访问速度慢?教你秒速打开你的WordPress
- [模板]ST表
- 【云星数据---mesos实战系列002】:mesos全分布式部署实战002--Java准备