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() 一次读入一个字节

  1. import java.io.FileInputStream;
  2. import java.io.FileNotFoundException;
  3. import java.io.IOException;
  4. public class day20_02 {
  5. /**
  6. * @param args
  7. * @throws IOException
  8. */
  9. public static void main(String[] args) throws IOException {
  10. FileInputStream fis = new FileInputStream("xxx"); //创建流对象
  11. int x = fis.read(); //从硬盘上读取一个字节,读取xxx文件内的 a
  12. int y = fis.read(); //再次创建对象,指针向后移动一次,读取到xxx文件内的 b
  13. System.out.println(x);
  14. System.out.println(y);
  15. fis.close(); //关流,释放资源
  16. System.out.println("-------------------");
  17.  
  18. //优化版(一般使用如下方式)
  19. FileInputStream fis2 = new FileInputStream("xxx");
  20. int b ;
  21. while((b=fis2.read()) != -1){
  22. System.out.println(b);
  23. }
  24. }
  25.  
  26. }

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

  1. import java.io.FileInputStream;
  2. import java.io.FileNotFoundException;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. public class day20_06 {
  6. /**
  7. * @param args
  8. * @throws IOException
  9. */
  10. public static void main(String[] args) throws IOException {
  11. FileInputStream fis = new FileInputStream("02.jpg");
  12. FileOutputStream fos = new FileOutputStream("copy.jpg");
  13.  
  14. int b ;
  15. while((b=fis.read()) != -1){
  16. fos.write(b);
  17. }
  18. fis.close();
  19. fos.close();
  20. }
  21. }

20.07 IO流(拷贝音频文件画原理图)
20.08 IO流(字节数组拷贝之available()方法)
  byte[] arr = new byte[fis.available()];//创建一个根输入文件一样大的数组
  此方法在开发中不推荐,加入要传一个10个G的电影,创建一个10个G的数组,不合理
20.09 IO流(定义小数组)
20.10 IO流(定义小数组的标准格式)

  1. import java.io.FileInputStream;
  2. import java.io.FileOutputStream;
  3. import java.io.IOException;
  4. public class day20_09 {
  5. /**
  6. * @param args
  7. * @throws IOException
  8. */
  9. public static void main(String[] args) throws IOException {
  10. FileInputStream fis = new FileInputStream("xxx");
  11. FileOutputStream fos = new FileOutputStream("copy2");
  12.  
  13. //byte[] arr = new byte[2];
  14. byte[] arr = new byte[1024 * 8]; //标准数组
  15. int len;
  16. while((len = fis.read(arr)) != -1) { //第一次获取到文件上的a和b
  17. fos.write(arr,0,len);
  18. }
  19. fis.close();
  20. fos.close();
  21. }
  22. }

20.11 IO流(BufferedInputStream和BufferedOutputStream拷贝)
 1.缓冲思想
  字节流一次读写一个数组的速度明显比一次读写一个字节的速度快,这也是加入了缓冲区效果,
  Java本身在设计的时候就加入这样的思考,所以提供了字节缓冲区流
 2.BufferedInputStream
  BufferedInputStream内置了一个缓冲区(数组)
  从BufferedInputStream中读取一个字节时,BufferedInputStream会一次性读取8192个,存在缓冲区中返回给程序。
  程序再次读取时,就不用找文件了,直接从缓冲区中获取;直到所有的都被读取过了,才重新开始
 3.BufferedOutputStream
  BufferedOutputStream也内置了一个缓冲区(数组),
  程序向流中写出数据时,先写到缓冲区中,直到缓冲区写满,BufferedOutputStream才会把缓冲区的数据一次性写到文件里
 4.拷贝的代码

  1. import java.io.BufferedInputStream;
  2. import java.io.BufferedOutputStream;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. public class day20_10 {
  7. /**
  8. * @param args
  9. * @throws IOException
  10. */
  11. public static <BufferInputStream> void main(String[] args) throws IOException {
  12. /*FileInputStream fis = new FileInputStream("02.jpg"); //输入流对象,关联02.jpg
  13. FileOutputStream fos = new FileOutputStream("copy2.jpg"); //输出流对象,关联copy2.jpg
  14.  
  15. BufferedInputStream bis = new BufferedInputStream(fis); //创建缓冲区对象,对输入流进行包装
  16. BufferedOutputStream bos = new BufferedOutputStream(fos);
  17. */
  18.  
  19. BufferedInputStream bis = new BufferedInputStream( new FileInputStream("02.jpg")); //创建缓冲区对象,对输入流进行包装
  20. BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy2.jpg"));
  21.  
  22. int b;
  23. while((b = bis.read()) != -1){
  24. bos.write(b);
  25. }
  26. bis.close();
  27. bos.close();
  28. }
  29. }

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流(图片加密)

  1. import java.io.BufferedInputStream;
  2. import java.io.BufferedOutputStream;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. public class day20_16 {
  7. /**
  8. * @param args
  9. * @throws IOException
  10. */
  11. public static void main(String[] args) throws IOException {
  12. BufferedInputStream bis = new BufferedInputStream( new FileInputStream("02.jpg")); //创建缓冲区对象,对输入流进行包装
  13. BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy3.jpg"));
  14.  
  15. /*运行此程序 生成照片打不开, 加密。关闭上面两行,打开下面两行 再次运行,解密
  16. BufferedInputStream bis = new BufferedInputStream( new FileInputStream("copy3.jpg")); //
  17. BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy4.jpg"));*/
  18. int b;
  19. while((b = bis.read()) != -1){
  20. bos.write(b^123);
  21. }
  22. bis.close();
  23. bos.close();
  24. }
  25.  
  26. }

加密

20.17 IO流(拷贝文件)

  1. import java.io.BufferedInputStream;
  2. import java.io.BufferedOutputStream;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.util.Scanner;
  8. public class day20_17 {
  9. /**
  10. * 分析:
  11. * 1.创建键盘录入对象
  12. * 2.定义方法对键盘录入的路径进行判断,是文件才返回
  13. * 3.在主方法中结束该文件
  14. * 4.读写该文件x
  15. * @throws IOException
  16. */
  17. public static void main(String[] args) throws IOException {
  18. File file = getFile();
  19. BufferedInputStream bis = new BufferedInputStream( new FileInputStream(file)); //创建缓冲区对象,对输入流进行包装
  20. BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file.getName()));
  21. int b;
  22. while((b = bis.read()) != -1){
  23. bos.write(b^123);
  24. }
  25. bis.close();
  26. bos.close();
  27. }
  28. /*定义一个方法获取键盘录入的路径,并封装成File
  29. * 1.返回值类型File
  30. * 2.参数列表无
  31. * */
  32. public static File getFile(){
  33. Scanner sc =new Scanner(System.in); //创建键盘录入对象
  34. System.out.println("请输入一个文件的路径:");
  35. while(true){
  36. String line = sc.nextLine(); //接收键盘录入的路径
  37. File file = new File(line);
  38. if(!file.exists()){
  39. System.out.println("录入的文件路径是:");
  40. }else if(file.isDirectory()){
  41. System.out.println("您录入的是文件夹路劲,请重新录入:");
  42. }else{
  43. return file;
  44. }
  45. }
  46. }
  47. }

20.18 IO流(录入数据拷贝到文件)

  1. import java.io.FileOutputStream;
  2. import java.io.IOException;
  3. import java.util.Scanner;
  4. public class day20_18 {
  5. /**
  6. * 录入数据拷贝到文件
  7. * 分析:
  8. * 1.创建键盘录入对象
  9. * 2.创建输出流对象,关联text.txt
  10. * 3.定义无限循环
  11. * 4.遇到quit退出循环
  12. * 5.如果不quit,将内容写出
  13. * 6.关闭流
  14. *输出: 123
  15. 123
  16. quit
  17.  
  18. * @throws IOException
  19. */
  20. public static void main(String[] args) throws IOException {
  21. Scanner sc =new Scanner(System.in); //创建键盘录入对象
  22. FileOutputStream fos = new FileOutputStream("text.txt");
  23. System.out.println("请输入一个文件的路径:");
  24. while(true){
  25. String line = sc.nextLine(); //接收键盘录入的路径
  26. if("quit".equals(line)){
  27. break;
  28. }
  29. fos.write(line.getBytes()); //字符串写出必须转换成字节数组
  30. fos.write("\r\n".getBytes());
  31. }
  32. fos.close();
  33. }
  34. }

20.19 IO流(IO流概述及分类)
 20.20 IO流(IO流概述及分类)

day20的更多相关文章

  1. Spark Streaming揭秘 Day20 动态Batch size实现初探(上)

    Spark Streaming揭秘 Day20 动态Batch size实现初探(上) 今天开始,主要是通过对动态Batch size调整的论文的解析,来进一步了解SparkStreaming的处理机 ...

  2. Day20 Django之Model多对多、中间件、缓存、信号和分页

    一.Form补充 class IndexForm(forms.Form): # c = [ # (1, 'CEO'), # (2, 'CTO') # ] # 静态字段,属于IndexForm类,即使数 ...

  3. Python之路,Day20 - 分布式监控系统开发

    Python之路,Day20 - 分布式监控系统开发   本节内容 为什么要做监控? 常用监控系统设计讨论 监控系统架构设计 监控表结构设计 为什么要做监控? –熟悉IT监控系统的设计原理 –开发一个 ...

  4. Day20 javaWeb监听器和国际化

    day20 JavaWeb监听器 三大组件: Servlet Listener Filter   Listener:监听器 初次相见:AWT 二次相见:SAX   监听器: 它是一个接口,内容由我们来 ...

  5. day20 project+查看新闻列表 + 点赞 + 图片验证码 + 评论和多级评论 + 后台管理 + webSocket + kindEditor

    Day20回顾: 1. 请求生命周期 2. 中间件 md = [ "file_path.classname" ] process_request[可有可无] process_res ...

  6. day20模块作业

    1.模块化作业 1.回顾文件递归遍历. 默写一遍. 入口在: 当文件是个文件夹的时候 出口在: 文件是一个文件 2.计算时间差(用户输入起始时间和结束时间. 计算时间差(小时), 例如, 用户输入20 ...

  7. day20——规范化目录

    day20 为什么要有规范化目录 可读性高: 不熟悉这个项目的代码的人,一眼就能看懂目录结构,知道程序启动脚本是哪个,测试目录在哪儿,配置文件在哪儿等等.从而非常快速的了解这个项目. 可维护性高: 定 ...

  8. day20 logging模块、re模块

    今日内容: 1.logging模块 2.re模块 1.logging模块 -- 什么是logging模块 -- logging模块是用来进行记录日志的模块,主要作用是将想要输出的日志进行分级,然后以不 ...

  9. 2019中山纪念中学夏令营-Day20[JZOJ] T1旅游详解

    2019中山纪念中学夏令营-Day20[JZOJ] 提高组B组 Team_B组 T1 旅游 Time Limits: 2000 ms  Memory Limits: 262144 KB Descrip ...

  10. day20 python异常处理 try except

    day20 python   一.异常处理     1.什么是异常, 常见异常有:         逻辑错误 ''' name Traceback (most recent call last):   ...

随机推荐

  1. Windows BAT 命令下del 与 rd 命令

    https://blog.csdn.net/jigetage/article/details/81180757 RD 与 DEL 命令 windows bat 目录和文件的删除处理. 命令:RD,删除 ...

  2. Mybatis测试用例

    package cn.zhangxueliang.mybatis.mapper; import static org.junit.Assert.*; import java.io.InputStrea ...

  3. mybatis数据源与连接池

    1.概念介绍1.1 数据源:顾名思义,数据的来源,它包含了数据库类型信息,位置和数据等信息,一个数据源对应一个数据库. 1.2 连接池:在做持久化操作时,需要通过数据库连接对象来连接数据库,而连接池就 ...

  4. python之路--装饰器

    二 .通用装饰器的写法 python里面的动态代理. 存在的意义: 在不破坏原有的函数和原有函数的调用基础上,给函数添加新的功能 def wrapper(fn): # fn是目标函数. def inn ...

  5. 解决 Redis 只读不可写的问题

    本文转载:https://blog.csdn.net/han_cui/article/details/54767208?tdsourcetag=s_pcqq_aiomsg 解决 Redis 只读不可写 ...

  6. 深度学习+CRF解决NER问题

    参考https://github.com/shiyybua/NER 1.开发环境:python3.5+tensorflow1.5+pycharm 2.从https://github.com/shiyy ...

  7. 【转】console.log 用法

    标签: 转自http://www.cnblogs.com/ctriphire/p/4116207.html 大家都有用过各种类型的浏览器,每种浏览器都有自己的特色,本人拙见,在我用过的浏览器当中,我是 ...

  8. Visual Studio常用插件整理

    Visual Studio Tools for Git       GIT代码管理工具 Resharper           代码生成工具 CSOutline2017      语法级别的代码折叠 ...

  9. 【C/C++】龙格库塔+亚当姆斯求解数值微分初值问题

    /* 解数值微分初值问题: 龙格-库塔法求前k个初值 + 亚当姆斯法 */ #include<bits/stdc++.h> using namespace std; double f(do ...

  10. Civil 3D 二次开发 创建Civil 3D 对象—— 00 ——

    本节中我们通过创建几何空间点.曲面和采样线了解Civil 3D对象的创建方法.因Civil 3D对象的创建方法相比AutoCAD对象创建要简单的多,比如创建一个几何空间点,最简单的情况采用一行代码(没 ...