day20---IO流概述
20.01 IO流(IO流概述及分类)
1.IO流用来处理设备之间的数据传输
Java对数据的操作是通过流的方式
Java用于操作流的类都在IO包中
字节流:字节流可以操作任何数据,计算机中任何数据都以字节的形式存储的
字符类:字符类只能操作纯字符数据,较为方便
2.IO流常用父类
字节流的抽象父类: InputStream OutputStram
字符流的抽象父类: Reader Writer
3.IO流程序书写
使用前: 导入IO包中的类
使用时: 进行IO异常处理
使用后: 释放资源
20.02 IO流(FileInputStream)
1.read() 一次读入一个字节
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class day20_02 {/*** @param args* @throws IOException */public static void main(String[] args) throws IOException {FileInputStream fis = new FileInputStream("xxx"); //创建流对象int x = fis.read(); //从硬盘上读取一个字节,读取xxx文件内的 aint y = fis.read(); //再次创建对象,指针向后移动一次,读取到xxx文件内的 b System.out.println(x);System.out.println(y);fis.close(); //关流,释放资源System.out.println("-------------------");//优化版(一般使用如下方式)FileInputStream fis2 = new FileInputStream("xxx");int b ;while((b=fis2.read()) != -1){System.out.println(b);}}}
View Code
20.03 IO流(read()方法返回值为什么是int)
1.read() 读取的是一个字节,为什么返回的是int,不是byte
因为自己输入流可以操作任意类型的文件,比如音频图片等,这些文件底层都是二进制形式存储的,如果内次读取都返回byte
有可能读到中间的时候遇到11111111,那么这11111111是byte类型的-1,这时候程序遇到-1就会停止
20.04 IO流(FileOutputStream)
2.write() 一次写出一个字节
20.05 IO流(FileOutputStream追加)
FileOutputStream的构造方法 写出数据 如何实现 数据的追加写入
FileOutputStream fos = new FileOutputStream("yyy.txt",true);
20.06 IO流(拷贝图片)
1.FileInputStream
2.FileOutputStream
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class day20_06 {/*** @param args* @throws IOException */public static void main(String[] args) throws IOException {FileInputStream fis = new FileInputStream("02.jpg"); FileOutputStream fos = new FileOutputStream("copy.jpg");int b ;while((b=fis.read()) != -1){fos.write(b);}fis.close();fos.close();} }
View Code
20.07 IO流(拷贝音频文件画原理图)
20.08 IO流(字节数组拷贝之available()方法)
byte[] arr = new byte[fis.available()];//创建一个根输入文件一样大的数组
此方法在开发中不推荐,加入要传一个10个G的电影,创建一个10个G的数组,不合理
20.09 IO流(定义小数组)
20.10 IO流(定义小数组的标准格式)
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class day20_09 {/*** @param args* @throws IOException */public static void main(String[] args) throws IOException {FileInputStream fis = new FileInputStream("xxx"); FileOutputStream fos = new FileOutputStream("copy2");//byte[] arr = new byte[2];byte[] arr = new byte[1024 * 8]; //标准数组int len;while((len = fis.read(arr)) != -1) { //第一次获取到文件上的a和bfos.write(arr,0,len);}fis.close();fos.close();} }
View Code
20.11 IO流(BufferedInputStream和BufferedOutputStream拷贝)
1.缓冲思想
字节流一次读写一个数组的速度明显比一次读写一个字节的速度快,这也是加入了缓冲区效果,
Java本身在设计的时候就加入这样的思考,所以提供了字节缓冲区流
2.BufferedInputStream
BufferedInputStream内置了一个缓冲区(数组)
从BufferedInputStream中读取一个字节时,BufferedInputStream会一次性读取8192个,存在缓冲区中返回给程序。
程序再次读取时,就不用找文件了,直接从缓冲区中获取;直到所有的都被读取过了,才重新开始
3.BufferedOutputStream
BufferedOutputStream也内置了一个缓冲区(数组),
程序向流中写出数据时,先写到缓冲区中,直到缓冲区写满,BufferedOutputStream才会把缓冲区的数据一次性写到文件里
4.拷贝的代码
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class day20_10 {/*** @param args* @throws IOException */public static <BufferInputStream> void main(String[] args) throws IOException {/*FileInputStream fis = new FileInputStream("02.jpg"); //输入流对象,关联02.jpgFileOutputStream fos = new FileOutputStream("copy2.jpg"); //输出流对象,关联copy2.jpgBufferedInputStream bis = new BufferedInputStream(fis); //创建缓冲区对象,对输入流进行包装BufferedOutputStream bos = new BufferedOutputStream(fos);*/BufferedInputStream bis = new BufferedInputStream( new FileInputStream("02.jpg")); //创建缓冲区对象,对输入流进行包装BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy2.jpg"));int b;while((b = bis.read()) != -1){bos.write(b);}bis.close();bos.close();} }
View Code
5.小数组的读写和带有Buffer的哪个读写gengk
定义小数组如果是8192个字节大小和Buffer比较的话
定义小数组会略胜一筹,因为读和写是一个数组,Buffer操作的是两个数组
20.12 IO流(flush和close方法的区别)
flush() 刷新缓冲区的,刷新后可以再次写出
close() 关闭释放流资源
20.13 IO流(字节流读取中文)
1.字节流读取中文:可能会读取到半个中文,造创乱码
2.字节流写出中文:字节流直接操作的字节,所以写出中文必须将字符串转换为字节数组
20.14 IO流(流的标准处理异常代码)
try finally
20.15 IO流(流的标准处理异常代码)
20.16 IO流(图片加密)
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class day20_16 {/*** @param args* @throws IOException */public static void main(String[] args) throws IOException {BufferedInputStream bis = new BufferedInputStream( new FileInputStream("02.jpg")); //创建缓冲区对象,对输入流进行包装BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy3.jpg"));/*运行此程序 生成照片打不开, 加密。关闭上面两行,打开下面两行 再次运行,解密BufferedInputStream bis = new BufferedInputStream( new FileInputStream("copy3.jpg")); //BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy4.jpg"));*/int b;while((b = bis.read()) != -1){bos.write(b^123);}bis.close();bos.close();}}
加密
20.17 IO流(拷贝文件)
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Scanner; public class day20_17 {/*** 分析:* 1.创建键盘录入对象* 2.定义方法对键盘录入的路径进行判断,是文件才返回* 3.在主方法中结束该文件* 4.读写该文件x* @throws IOException */public static void main(String[] args) throws IOException {File file = getFile();BufferedInputStream bis = new BufferedInputStream( new FileInputStream(file)); //创建缓冲区对象,对输入流进行包装BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file.getName()));int b;while((b = bis.read()) != -1){bos.write(b^123);}bis.close();bos.close();}/*定义一个方法获取键盘录入的路径,并封装成File* 1.返回值类型File* 2.参数列表无* */public static File getFile(){Scanner sc =new Scanner(System.in); //创建键盘录入对象System.out.println("请输入一个文件的路径:");while(true){String line = sc.nextLine(); //接收键盘录入的路径File file = new File(line);if(!file.exists()){System.out.println("录入的文件路径是:");}else if(file.isDirectory()){System.out.println("您录入的是文件夹路劲,请重新录入:");}else{return file;}}} }
View Code
20.18 IO流(录入数据拷贝到文件)
import java.io.FileOutputStream; import java.io.IOException; import java.util.Scanner; public class day20_18 {/*** 录入数据拷贝到文件* 分析:* 1.创建键盘录入对象* 2.创建输出流对象,关联text.txt* 3.定义无限循环* 4.遇到quit退出循环* 5.如果不quit,将内容写出* 6.关闭流*输出: 123123quit* @throws IOException */public static void main(String[] args) throws IOException {Scanner sc =new Scanner(System.in); //创建键盘录入对象FileOutputStream fos = new FileOutputStream("text.txt");System.out.println("请输入一个文件的路径:");while(true){String line = sc.nextLine(); //接收键盘录入的路径if("quit".equals(line)){break;}fos.write(line.getBytes()); //字符串写出必须转换成字节数组fos.write("\r\n".getBytes());}fos.close();} }
View Code
20.19 IO流(IO流概述及分类)
20.20 IO流(IO流概述及分类)
转载于:https://www.cnblogs.com/chengxiaofeng/p/10423588.html
day20---IO流概述相关推荐
- 第1章 IO流概述及FileWriter类使用
1.1 IO流概述及分类 IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的类都在IO包中 流按流向分为两种:输入流,输出流 1.2 FileWriter类使用 ...
- 【Java基础】IO流概述分类、字节流写数据、字节流写数据的三种方式及写数据的两个小问题
目录 一.IO流概述和分类 二.字节流写数据 三.字节流写数据的三种方式 四.字节流写数据的两个小问题 一.IO流概述和分类 IO流介绍: ● IO:输入/输出(Input/Output) ● 流:是 ...
- 【java笔记】IO流(1):IO流概述,字节输出/输入流读写文件
IO概述: I: input( 读取 ) 把硬盘中的数据,读取到内存中使用 O: output(写入) 把内存中的数据,写入到硬盘中保存 流:数据(字符,字节)1个字符=2个字节 ,1个字节=8个二 ...
- JavaSE进阶26 - IO流概述、字节流、字符流、转换流、缓冲流
目录 IO概述 FileInputStream的使用 FileOutputStream使用 文件复制 文件的复制原理 代码 FileReader FileWriter 复制普通文本文件 Buffere ...
- Java IO流(概述)
1 package com.yyq; 2 /* 3 * IO 流用来处理设备之间的数据传输 4 * java对数据的操作是通过流的方式 5 * Java用于操作流的对象都在IO包中 6 * 流按操作数 ...
- Java基础进阶IO流概述
1.IO流,什么是IO? I : Input O : Output 通过IO可以完成硬盘文件的读和写. 2.IO流的分类? 有多种分类方式: 一种方式是按照流的方向进行分类: 以内存作为参照物 往内存 ...
- Java基础IO流概述、字符流、字节流、流操作规律、File类、Properties类、打印流、序列流
IO流:(Input Output)流 字符流的由来:其实就是字节流读取文字字节数据后,不直接操作而是先查指定的码表,获取对应的文字进行操作 简单说:字符流 = 字节流 + 编码表 字节流的两个顶层父 ...
- [Java基础]IO流概述和分类
- 字节流(IO流)概述、字节流(写入/输出)数据(3种)和换行、追加写入、异常处理办法、字节缓冲流、字节流复制图片视频案例
目录 IO流概述和分类 字节流写入数据(OutputStream) FileOutputStream 字节流写数据的3种方式 字节流写入数据的两个小问题 字节流写数据如何换行 字节流如何实现追加写入 ...
- IO流常用类使用详解
IO流概述 IO流的概述和分类 输入流:把硬盘上的数据读取到内存中 字符输入流:读取字符 字节输入流:读取字节 输出流:把内存中的数据写入到硬盘中 字符输出流:写入字符 字节输出流:写入字节 字符流和 ...
最新文章
- 德尔塔克戎,新冠“双毒合一”变体首次证实
- 安装mysql总是未响应状态_求助啊 WIN7下安装mysql出问题 老是说未响应~!!
- python stm32f401_NUCLEO-F401RE(STM32F401RE)开发板跑Micropython平台
- redis核心技术与实战(四)高可用高扩展篇
- 学习记录-程序语言基础(1)
- zabbix官方文档磁盘统计
- 字节全栈工程师亲自整理的40个前端练手项目
- 一篇文章彻底弄懂Base64编码原理
- Java方法重写和重载的区别
- Debian修改IP地址
- 淘宝客淘宝联盟解析二合一链接获取优惠链接还原二合一,提取优惠信息
- Taro从零创建微信小程序步骤
- 中冠百年|个人如何理财收益最大
- Redis入门指南:深入了解这款高性能缓存数据库
- 华为鸿蒙os设置界面,华为鸿蒙OS系统界面疑似曝光 运行性能提升超60%
- 地震了!这一次苹果太强硬,如果你的 App 拒绝抛弃这些技术,将在2020年3月全面下架!...
- 方舟生存进化助手隐私政策条款
- Vmware Links(转自VMware-land)
- vs2017许可证书过期真正的解决方法
- macos支持exfat吗_打造便捷、人性化的macOS桌面使用环境
热门文章
- ios uistepper_iOS UIStepper
- 检查python模块_Python输入模块–有效使用类型检查器
- jaxb-xjc.jar_jaxb2-maven-plugin XJC示例,用于从XSD生成Java类
- soap xml_SOAP XML消息–使用Liquid XML Studio进行了解和创建
- MySQL Online DDL 方案剖析
- Python基础---注意事项
- 针对关键字是字符串的一个比较好的散列函数
- 如何更有效地从阅读中汲取知识?
- 通过v$sqlarea,v$sql查询最占用资源的查询
- 剑指offer——跳台阶变态跳台阶矩形覆盖