字节流Stream(Output 、Input)、字符流(Reader、Writer)
Summarize:
IO流分两种:①字节流②字符流
刚上来可能会被字符字节流给绕进去,但仔细想一下其实它俩都一个样,只是节和符的区别!字节流和字符流都是有输入和输出 只要性质不同
字节流分:
①OutpStream:字节输出流 写入数据
先创建一个存储数据的文件,
注意:输出流目的是文件,无则创建,有则覆盖
File file =new File("d:\\java\\a.txt")
FileOutputStream fos= new FileOutputStream(file)
②InputStream :字节输入流 读取数据
字节输出流 OutputStream
是抽象类,是输出字节流所有类的超类,操作数据都是字节
字节流:什么都可以传 分为 输出流和输入流
字符流:只能传输文本文件
FileOutputStream类
文件输出流:将数据写入File的输出流
构造方法:
FileOutputStream类写入数据到文件
package com.oracle.demo01;import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException;public class Demo01 {public static void main(String[] args) throws IOException { // 创建字节流输出流对象(输出的值能是文件,不能输出目录) // 当构造方法指定文件地址时,如果存在,则覆盖 ,不存在就创建,只能写文件路径 不能创建目录FileOutputStream fos=newFileOutputStream("f:\\java\\d.txt");//报异常是因为 /* 向文件写入一个字节 write(写数字)得到ASCII码值 一次方法只能写入一个字节0 - 48a - 97A - 65fos.write(49);fos.write(48);fos.write(48);*/ // 向文件写入一个字节数组write(byte[] b)byte[] bytes={-66,-67,-68,-69};//正数是走表,负数显示汉字,两个字节=一个汉字//fos.write(bytes);fos.write(bytes, 2, 2);//第一个2是从下标2开始,第二个2是长度 // 释放资源 fos.close();} }
给文件中续写和换行
new FileOutputStream(file) 创建对象,写入数据,会覆盖原有文件,如果我们续写
构造方法:
package com.oracle.demo01; //字节输出流 续写 import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException;/*public class Demo02 {public static void main(String[] args) throws IOException { // 创建字节输出流(开启续写功能)FileOutputStream fos=newFileOutputStream("f:\\java\\d.txt",true);默认false // 字符串->字节数组 getBytes() 串转字节数组//续写往d.txt里面写数据fos.write("abc".getBytes()); // 换行 "\r\n"fos.write("\r\n换行了".getBytes()); // 释放资源fos.close();} }*/ //下面处理异常 复制上面 public class Demo02 {public static void main(String[] args){\*处理异常,close必须放在finally里面 涉及fos定义问题,在外面赋值定义*/FileOutputStream fos=null;try {fos=new FileOutputStream("f:\\Java\\d.txt",true);fos.write("abc".getBytes());} catch (IOException e) {// TODO Auto-generated catch block e.printStackTrace();}finally {try {fos.close();} catch (IOException e) {// TODO Auto-generated catch block e.printStackTrace();}} } }
字节输入流 InputStream
抽象类,字节输入流所有类的超类
int read():读一个字节,并返回,无字节 返回-1
int read(byte[ ]):读一定量字节数,存储到字节数组,返回读取到的字节数
package com.oracle.demo01; //创建一个字节输入流 import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException;public class Demo04 {public static void main(String[] args) throws IOException { // 创建字节输入流(明确从哪个文件读取数据)FileInputStream fis=new FileInputStream("f:\\java\\d.txt"); // 一个字节一个字节读取文件所有数据局 // 一个循环全部读出来int len=0;while((len=fis.read())!=-1){ //!=-1 是结束标记,一次读个字符数组,当读完后得返回-1System.out.println((char)len);}// 释放资源 fis.close();} }
FileInputStream类
构造方法
读取数据 read方法:读取文件中的数据时,调read方法,实现从文件中读取数据
读取数据read(byte[])方法
字节输入流:InputStream
子类:FileInputStream 加个File 就是文件输入流
package com.oracle.demo01; //读取输入流字节数组 import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException;public class Demo05 {public static void main(String[] args) throws IOException {FileInputStream fis=new FileInputStream("f:\\java\\d.txt"); // 创建字节数组byte[] bytes=new byte[2]; /*// 读取一个字节数组int len=fis.read(bytes); // 实际读取的有效字节数System.out.println(len); // 字节数组->字符串System.out.println(new String(bytes)); // 循环读取字节数组 */ int len=0;while((len=fis.read(bytes))!=-1){System.out.println(new String(bytes,0,len));} // 释放资源 fis.close();} }
字节流 复制文件
package com.oracle.demo01; //复制字节流 import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException;public class copy {public static void main(String[] args) throws IOException { // 先读 明确数据源 FileInputStream fis=new FileInputStream("f:\\java\\d.txt"); // 明确目的地FileOutputStream fos=new FileOutputStream("f:\\java\\e.txt"); // 开始复制int len=0;while((len=fis.read())!=-1){fos.write(len);} // 释放资源 fis.close();fos.close();} }
复制字节流数组
package com.oracle.demo01; //复制数组字节流 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class ArrStreamCopy {public static void main(String[] args) throws IOException {File srcFile = new File("c:\\YesDir\test.JPG");File destFile = new File("copyTest.JPG");// 明确字节流 输入流和源相关联,输出流和目的关联。FileInputStream fis = new FileInputStream(srcFile);FileOutputStream fos = new FileOutputStream(destFile);//定义一个缓冲区。byte[] buf = new byte[1024];int len = 0;while ((len = fis.read(buf)) != -1) {fos.write(buf, 0, len);// 将数组中的指定长度的数据写入到输出流中。 }// 关闭资源。 fos.close();fis.close();} }
pm
字符流
分两种,字符输出流 write 和 字符输入流reader 只要看到reader和write 就是 字符流 只要看到结尾是 Stream 就是字节流
字符流理解:
对文本文件判定:只要一个文件用笔记本打开,能看懂的就是文本
字符输入流 Reader
read():读去一个字符 返回
read(char[ ]):把数据读到数组,返回读取个数
FileReader类
构造方法
package com.oracle.demo02; //字符输入流Reader import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; //字符输入流 public class Demo01 {public static void main(String[] args) throws IOException { // 创建字符输入流FileReader fr=new FileReader("f:\\java\\d.txt");int len=0; // 一个字符一个字符读while((len=fr.read())!=-1){System.out.println((char)len);} // 释放资源 fr.close();} }
package com.oracle.demo02; //字符输入流数组 import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException;public class Demo02 {public static void main(String[] args) throws IOException { // 创建字符输入流FileReader fr=new FileReader("f:\\java\\d.txt"); // 创建字符数组char[] ch=new char[1024]; // 一个字符数组一个字符数组的读int len=0;while((len=fr.read(ch))!=-1){System.out.println(new String(ch,0,len));} // 释放资源 fr.close();} }
字符输出流 Writer
write是写入字符流的抽象类
FileWriter类
构造方法
FileWriter写入中文到文件中
flush()和close()的区别
flush():缓冲的数据刷新到目的地,刷新流 刷一次更新一次
close():关闭 只有一次
package com.oracle.demo02; //字符输出流 write import java.io.File; import java.io.FileWriter; import java.io.IOException;public class FileWrite {public static void main(String[] args) throws IOException { // 创建字符输出流 FileWriter fw=new FileWriter("f:\\java\\d.txt",true);//续写字符串 ,不管输入输出 // 写入一个字符 // fw.write(100); // 写入一个字符串fw.write("你好呀");fw.flush();//刷新流 刷一次 更新一次 // 写入字符数组char[] ch={'a','1','r'};fw.write(ch);fw.flush(); // 释放资源 // fw.close(); } }
package com.oracle.demo02; //复制字符流 import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException;public class FileReaderCopy {public static void main(String[] args) throws IOException { // 明确数据源FileReader fr=new FileReader("f:\\java\\d.txt"); // 明确目的地FileWriter fw=new FileWriter("f:\\java\\e.txt");int len=0; // 开始复制while((len=fr.read())!=-1){fw.write(len);fw.flush();//写一个刷一个 } // 释放资源 fr.close();} }
package com.oracle.demo02; \\加上时间 复制完后 显示用时 import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;public class zuoye { public static void main(String[] args) throws IOException { //单字节复制文件//开始时间毫秒值long starttime =System.currentTimeMillis();copy("F:\\jdk1.8\\JDK_API_1_6_zh_CN.CHM","F:\\jdk1.8\\JDK.CHM");long endtime = System.currentTimeMillis();System.out.println("单字节复制时间毫秒值:"+(endtime-starttime));}// byte数组复制文件public static void copys(String source, String destination) throws IOException {// 明确数据源FileInputStream fis = new FileInputStream(source);// 明确目的地FileOutputStream fos = new FileOutputStream(destination);// 开始复制byte[] bytes = new byte[10240 * 10240];// 读取容器int len = 0; // 读取的有效长度while ((len = fis.read(bytes)) != -1) {// 写入文件fos.write(bytes, 0, len);}// 关闭流 fos.close();fis.close();}// 单字节复制方法public static void copy(String source, String destination) throws IOException{// 明确数据源FileInputStream fis = new FileInputStream(source);// 明确目的地FileOutputStream fos = new FileOutputStream(destination);// 开始复制int len = 0;while ((len = fis.read()) != -1) {fos.write(len);}// 释放资源 fis.close();fos.close();} }
转载于:https://www.cnblogs.com/zs0322/p/11027128.html
字节流Stream(Output 、Input)、字符流(Reader、Writer)相关推荐
- IO流:输入字节流:InputStream 、 输出字节流:OutputStream 、输入字符流:Reader 、输出字符流:Writer、 BufferedInputStream
## 1_ IO流的介绍及其分类 * IO流: * I: Input 输入 * O: Output 输出 ...
- 【学习日记2023.4.9】之释放资源的方式_编解码_字符流(Reader/Writer)及其子类_转换流( [In/Out]putStreamReader)
文章目录 1. 释放资源的方式 1.1 try-catch-finally 1.1.1 finally 格式 特点 执行时机 1.1.2 处理IO流中的异常 1.2 try-with-resource ...
- 系统学习JAVA第十七天(字节流、字符流、缓冲的字节流、缓冲的字符流、将字节流转换为缓冲的字符流、面向对象——>字节流转成对象)
系统学习JAVA第十七天 第一阶段在2021.2.1结束了! 一.数据传输 IO输入和输出,硬盘之间的数据交换 1.文件读写流程 ①创建文件的容器 ②判断方向 合适的类 创建和文件之间的通道 ③ 调用 ...
- java 字节流读取图片,字符流读取,二进制读取
这两天在学习java中如何对文件进行读取,首先当然是对最简单的文件txt文件进行操练了.并且,逐渐的了解了Java中IO流是如何对文件进行操作的 操练了一段时间,便开始了对图片进行读取,开始的想法如下 ...
- java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝
接上一篇的字节流,以下主要介绍字符流.字符流和字节流的差别以及文件复制拷贝.在程序中一个字符等于两个字节.而一个汉字占俩个字节(一般有限面试会问:一个char是否能存下一个汉字,答案当然是能了,一个c ...
- 字符流Reader和Writer
1.Rader是字符输入流的父类. 2.Writer是字符输出流的父类. 3.字符流是以字符(char)为单位读取数据的,一次处理一个unicod. 4.字符类的底层仍然是基本的字节流. 5.Read ...
- 字符流Reader对象创建子类及方法
字符流中输入数据主要用Reader来完成,输出使用Reader 父类---Reader 子类---BufferedReader / CharArrayReader / FilterReader / I ...
- java字符流和字节流转换_java中字符流和字节流的转换
看到InputStreamReader和OutputStreamWriter的一些说法, 说InputStreamReader是将字节流转换成字符流,而OutputStreamWriter则相反,是将 ...
- java字符流和字节流的区别_java字符流与字节流的区别是什么
java中字符流与字节流的区别: 1.字节流操作的基本单元为字节:字符流操作的基本单元为Unicode码元. 2.字节流默认不使用缓冲区:字符流使用缓冲区. 3.字节流通常用于处理二进制数据,实际上它 ...
- JAVA输入输出IO流→File、RandomAccessFilse、字节流InputSream与OutputStream、字符流Reader与Writer、对象序列化Serializable
三十辐共一毂,当其无,有车之用. 埏埴以为器,当其无,有器之用. 凿户牖以为室,当其无,有室之用. 故有之以为利,无之以为用. ----<道德经>第十一章
最新文章
- MySQL8索引篇:性能提升了100%!!
- springboot如何对本地数据库增删改查_SpringBoot整合Mybatis实现数据库增删改查
- C#学习笔记(十一):动态类型
- 某大型银行深化系统技术方案之七:核心层之流程控制引擎
- 牛客网--华为机试在线训练2:计算字符个数
- 品读大话数据结构之六-----线性表(中)
- eclipse配置jsp页面模板
- c语言函数max 的作用,C语言问题—max()函数
- Xilinx XC7Z020双核ARM+FPGA开发板试用合集——硬件赏析
- 基于RouteOS的NAT Radius网络计费管理实验
- mfc treectrl设置背景透明_微信透明头像怎么弄 专用透明头像图片更换设置教程闽南网...
- 学习Linux命令(11) startx
- 雨听|在语雀中删除知识库
- (有小案例)初始Mybatis框架及使用
- elasticsearch6.8.4-docker部署升级方式以及安全加密
- 【白皮书分享】2020脱发治疗白皮书.pdf(附下载链接)
- 3.linux分区详解
- 使用for循环计算n的阶乘
- 计算机网页设计论文加成品,计算机网页设计教学研究论文
- 【HDOJ】4642 Fliping game_天涯浪子_新浪博客
热门文章
- Facebook的图片搜索技术揭秘
- java集合框架 改写_Java集合框架1
- python3.7安装pyltp出错_安装pyltp遇到的问题及解决办法
- 复杂网络代码_据报道称“浏览器内核有上千万行代码”,浏览器内核真的很复杂吗?...
- python 功能代码是什么_Python功能代码
- 安装Discuz!NT(SQL Server 2005)
- R语言--字符串操作
- 从零开始学Vue(一)—— Vue.js 入门
- P2770 航空路线问题
- BZOJ 1878: [SDOI2009]HH的项链【莫队】