day20
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文件内的 a
int 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);
}
} }
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();
}
}
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和b
fos.write(arr,0,len);
}
fis.close();
fos.close();
}
}
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.jpg
FileOutputStream fos = new FileOutputStream("copy2.jpg"); //输出流对象,关联copy2.jpg BufferedInputStream 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();
}
}
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;
}
}
}
}
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.关闭流
*输出: 123
123
quit * @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();
}
}
20.19 IO流(IO流概述及分类)
20.20 IO流(IO流概述及分类)
day20的更多相关文章
- Spark Streaming揭秘 Day20 动态Batch size实现初探(上)
Spark Streaming揭秘 Day20 动态Batch size实现初探(上) 今天开始,主要是通过对动态Batch size调整的论文的解析,来进一步了解SparkStreaming的处理机 ...
- Day20 Django之Model多对多、中间件、缓存、信号和分页
一.Form补充 class IndexForm(forms.Form): # c = [ # (1, 'CEO'), # (2, 'CTO') # ] # 静态字段,属于IndexForm类,即使数 ...
- Python之路,Day20 - 分布式监控系统开发
Python之路,Day20 - 分布式监控系统开发 本节内容 为什么要做监控? 常用监控系统设计讨论 监控系统架构设计 监控表结构设计 为什么要做监控? –熟悉IT监控系统的设计原理 –开发一个 ...
- Day20 javaWeb监听器和国际化
day20 JavaWeb监听器 三大组件: Servlet Listener Filter Listener:监听器 初次相见:AWT 二次相见:SAX 监听器: 它是一个接口,内容由我们来 ...
- day20 project+查看新闻列表 + 点赞 + 图片验证码 + 评论和多级评论 + 后台管理 + webSocket + kindEditor
Day20回顾: 1. 请求生命周期 2. 中间件 md = [ "file_path.classname" ] process_request[可有可无] process_res ...
- day20模块作业
1.模块化作业 1.回顾文件递归遍历. 默写一遍. 入口在: 当文件是个文件夹的时候 出口在: 文件是一个文件 2.计算时间差(用户输入起始时间和结束时间. 计算时间差(小时), 例如, 用户输入20 ...
- day20——规范化目录
day20 为什么要有规范化目录 可读性高: 不熟悉这个项目的代码的人,一眼就能看懂目录结构,知道程序启动脚本是哪个,测试目录在哪儿,配置文件在哪儿等等.从而非常快速的了解这个项目. 可维护性高: 定 ...
- day20 logging模块、re模块
今日内容: 1.logging模块 2.re模块 1.logging模块 -- 什么是logging模块 -- logging模块是用来进行记录日志的模块,主要作用是将想要输出的日志进行分级,然后以不 ...
- 2019中山纪念中学夏令营-Day20[JZOJ] T1旅游详解
2019中山纪念中学夏令营-Day20[JZOJ] 提高组B组 Team_B组 T1 旅游 Time Limits: 2000 ms Memory Limits: 262144 KB Descrip ...
- day20 python异常处理 try except
day20 python 一.异常处理 1.什么是异常, 常见异常有: 逻辑错误 ''' name Traceback (most recent call last): ...
随机推荐
- [转][mysql]创建函数失败(1418错误)mysql双主模式导致的问题
https://blog.csdn.net/qq523786283/article/details/75102170
- JMeter学习FTP测试计划(转)
FTP服务主要提供上传和下载功能.有时间需要我们测试服务器上传和下载的性能.在这里我通过JMeter做一个FTP测试计划的例子. 1.创建一个线程组 2.线程组--->添加--->配置元件 ...
- WSL Windows subsytem linux 的简单学习与使用
1. win10 1709 以上的版本应该都增加上了 ctrl +r 运行 winver 查看版本 2. 添加删除程序 增加 wsl 增加一个功能 3. 打开cmd 输入 bash 即可 4. 可以将 ...
- 【学亮IT手记】mysql创建/查看/切换数据库
--创建数据库 create database web_test1 CHARACTER set utf8; --切换数据库 use web_test1; --查看当前使用的数据库 select DAT ...
- AngularJS集合数据遍历显示
AngularJS集合数据遍历显示 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...
- js的日期操作:String转date日期格式、求日期差
一.在js中String类型转成date格式 var date = new Date("2018-9-21 14:58:43");//就是这么简单 二.date转String类型就 ...
- Java 多线程概述
几乎所有的操作系统都支持同时运行多个任务,一 个任务通常就是一个程序,每个运行中的程序就是一个进程.当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程. 线程和进程 几乎所有的 ...
- python爬虫之git的团队协作
一.Git实践: commit,push,pull,status,add基本是最常用的几个命令. 1.首先我在github上创建了一个项目,然后我在本地的文件建立了一个普通的目录(git_data). ...
- Python rsa公私钥生成 rsa公钥加解密(分段加解密)-私钥加签验签实战
一般现在的SAAS服务提供现在的sdk或api对接服务都涉及到一个身份验证和数据加密的问题.一般现在普遍的做法就是配置使用非对称加密的方式来解决这个问题,你持有SAAS公司的公钥,SAAS公司持有你的 ...
- django restframework PrimaryKeyRelatedField筛选的困惑
一.在开发某运动app时,遇见以下情况 1.部分表内容如下: class Sports(models.Model): ''' 运动表 ''' school = models.ForeignKey(Sc ...