I/O

相关简介

  • 什么是I/O?
    IO,即Input (输入)和Output (输出)的首字母缩写。

  • 什么是流?
    流(Stream)是抽象概念,它代表任何有能力产出数据的数据源对象或者是与能力接收数据的接收端对象,“流”屏蔽了实际的I/O设备中处理数据的细节。

  • 流的种类
    • 1.字符流
    • 2.字节流

字符流

字符输出流

输出流是将内容“写”到外部文件


public void test1() {FileWriter fileWriter = null;try {//  ./代表当前目录fileWriter = new FileWriter("./aaa.txt", true);fileWriter.write("冰川双子天下第一");    //括号里是想输出的东西fileWriter.write("mskk天下第一");fileWriter.write("彩千圣天下第一");//          fileWriter.close(); //必须要关了流才能把东西写进去,但是要在finally里写,见以下代码} catch (IOException e) {e.printStackTrace();} finally {try {if (fileWriter != null) {fileWriter.close();     //先try catch 再surround}} catch (IOException e) {e.printStackTrace();}}}

字符输入流

输入流是将内容“读”进内部文件

  • read方法的过程

    • 1.从文件中读取的内容会依次放入buffer数组中
    • 2.要么读满数组,要么文件结束
    • 3.如果文件已经到达最后的位置,就会返回-1

public void test2() {FileReader fileReader = null;try {fileReader = new FileReader("./aaa.txt");//每次读取的最大长度char[] buffer = new char[8];//            int len = fileReader.read(buffer);//len是字符数
//            System.out.println(len);
//            System.out.println(new String(buffer, 0, len));int len = 0;while ((len = fileReader.read(buffer)) != -1) {System.out.println(new String(buffer, 0, len));//参数意义:使用buffer数组,从第0个开始,读取len长度}} catch (IOException e) {e.printStackTrace();} finally {try {if (fileReader != null) {fileReader.close();}} catch (IOException e) {e.printStackTrace();}}}

练习:将aaa.txt复制一份生成一个bbb.txt


public void test3() {FileWriter fileWriter1 = null;FileReader fileReader1 = null;try {fileWriter1 = new FileWriter("./bbb.txt");fileReader1 = new FileReader("./aaa.txt");char[] buffer = new char[8];int len = 0;while ((len = fileReader1.read(buffer)) != -1) {fileWriter1.write(buffer, 0, len);}} catch (IOException e) {e.printStackTrace();} finally {if (fileWriter1 != null) {try {fileWriter1.close();} catch (IOException e) {e.printStackTrace();}}if (fileReader1 != null) {try {fileReader1.close();} catch (IOException e) {e.printStackTrace();}}}}

带缓冲区的字符输出流


public void test4() {FileWriter fileWriter2 = null;BufferedWriter bufferedWriter = null;try {fileWriter2 = new FileWriter("./ccc.txt");//bufferedWriter对象并不是一个真正的流//他只是在fileWriter对象的基础上添加了新的逻辑bufferedWriter = new BufferedWriter(fileWriter2);//括号里一定要填一个流bufferedWriter.write("写一行");bufferedWriter.newLine();   //换行//将缓冲区的内容写到文件中,清空缓冲区//方便后续继续写入bufferedWriter.flush(); //刷新缓冲区} catch (IOException e) {e.printStackTrace();} finally {try {if (bufferedWriter != null) {bufferedWriter.close();     //当使用缓冲区时,只关闭缓冲区就可以}} catch (IOException e) {e.printStackTrace();}}}

带缓冲区的字符输入流


public void test5() {FileReader fileReader2 = null;BufferedReader bufferedReader = null;try {fileReader2 = new FileReader("./ccc.txt");bufferedReader = new BufferedReader(fileReader2);String line = null;while ((line = bufferedReader.readLine()) != null) {System.out.println(line);}} catch (IOException e) {e.printStackTrace();}}

练习:使用缓冲区将ccc.txt复制到ddd.txt


public void test6() {FileReader fileReader3 = null;BufferedReader bufferedReader1 = null;FileWriter fileWriter3 = null;BufferedWriter bufferedWriter1 = null;try {fileReader3 = new FileReader("./ccc.txt");bufferedReader1 = new BufferedReader(fileReader3);fileWriter3 = new FileWriter("./ddd.txt");bufferedWriter1 = new BufferedWriter(fileWriter3);String line = null;while ((line = bufferedReader1.readLine()) != null) {bufferedWriter1.write(line);bufferedWriter1.flush();}} catch (IOException e) {e.printStackTrace();} finally {try {if (bufferedWriter1 != null) {bufferedWriter1.close();}if (bufferedReader1 != null) {bufferedReader1.close();}} catch (IOException e) {e.printStackTrace();}}}

字节流

字节输出流


public void test7() {FileOutputStream fileOutputStream = null;try {fileOutputStream = new FileOutputStream("./eee.txt");fileOutputStream.write("摩卡兰天下第一".getBytes());} catch (IOException e) {e.printStackTrace();} finally {try {if (fileOutputStream != null) {fileOutputStream.close();}} catch (IOException e) {e.printStackTrace();}}}

字节输入流


public void test8() {FileInputStream fileInputStream = null;try {fileInputStream = new FileInputStream("./eee.txt");int len = 0;byte[] bytes = new byte[1024];while ((len = fileInputStream.read(bytes)) != -1) {System.out.println(new String(bytes));}} catch (IOException e) {e.printStackTrace();} finally {try {if (fileInputStream != null) {fileInputStream.close();}} catch (IOException e) {e.printStackTrace();}}}

练习:用字节流复制图片


public void test9() {FileOutputStream fileOutputStream = null;FileInputStream fileInputStream = null;try {fileOutputStream = new FileOutputStream("G:\\破烂\\666.jpg");    //此处是新图片地址,可以新建可以覆盖fileInputStream = new FileInputStream("G:\\破烂\\11111.jpg");    //此处是想要复制的图片的地址int len = 0;byte[] bytes = new byte[1024];while ((len = fileInputStream.read(bytes)) != -1) {fileOutputStream.write(bytes, 0, len);}} catch (IOException e) {e.printStackTrace();} finally {try {if (fileOutputStream != null) {fileOutputStream.close();}} catch (IOException e) {e.printStackTrace();}try {if (fileInputStream != null) {fileInputStream.close();}} catch (IOException e) {e.printStackTrace();}}}

练习:用字节流复制mp3

public void test10() {FileOutputStream fileOutputStream = null;FileInputStream fileInputStream = null;try {fileOutputStream = new FileOutputStream("G:\\破烂\\有你的江湖.mp3");fileInputStream = new FileInputStream("G:\\破烂\\DMYoung,岚aya - 有你的江湖-TVsize.mp3");int len = 0;byte[] bytes = new byte[10240000];while ((len = fileInputStream.read(bytes)) != -1) {fileOutputStream.write(bytes, 0, len);}} catch (IOException e) {e.printStackTrace();} finally {try {if (fileOutputStream != null) {fileOutputStream.close();}} catch (IOException e) {e.printStackTrace();}try {if (fileInputStream != null) {fileInputStream.close();}} catch (IOException e) {e.printStackTrace();}}}

缓冲区字节输出流

public void test11() {BufferedOutputStream bufferedOutputStream = null;FileOutputStream fileOutputStream= null;try {fileOutputStream = new FileOutputStream("./xxx.txt");bufferedOutputStream = new BufferedOutputStream(fileOutputStream);bufferedOutputStream.write("花音千圣天下第一".getBytes());bufferedOutputStream.flush();} catch (IOException e) {e.printStackTrace();}finally {try {if (bufferedOutputStream != null) {bufferedOutputStream.close();}} catch (IOException e) {e.printStackTrace();}}}

缓冲区字节输入流


public void test12(){FileInputStream fileInputStream = null;BufferedInputStream bufferedInputStream = null;try {fileInputStream = new FileInputStream("./xxx.txt");bufferedInputStream = new BufferedInputStream(fileInputStream);byte[] bytes = new byte[1024];int len = 0;while ((len = bufferedInputStream.read(bytes)) != -1){System.out.println(new String(bytes,0,len));}} catch (IOException e) {e.printStackTrace();}finally {try {bufferedInputStream.close();} catch (IOException e) {e.printStackTrace();}}}
  • 字符流和字节流的区别

    • 1.处理对象不同
    • 2.处理数据的单位不同,字符流操作char,字节流操作byte(Java中一个中文占3个字节)

序列化

序列化


public void test13(){Student student = new Student();student.setName("刘子博");student.setAge(22);student.setId("12345678");//1.类结构要不要保存?       不需要//2.数据要不要?              需要//3.变量名和创建位置要不要?    不需要//保存一个对象最重要的就是保存数据ObjectOutputStream oos = null;FileOutputStream fos = null;try {fos = new FileOutputStream("./stu.out");oos = new ObjectOutputStream(fos);//将一个对象写入本地oos.writeObject(student);} catch (IOException e) {e.printStackTrace();}finally {try {if (fos != null) {fos.close();}} catch (IOException e) {e.printStackTrace();}}}

反序列化


public void test14(){ObjectInputStream ois = null;FileInputStream fis = null;try {fis = new FileInputStream("stu.out");ois = new ObjectInputStream(fis);Object o = ois.readObject();System.out.println(o);} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}finally {try {if (fis != null) {fis.close();}} catch (IOException e) {e.printStackTrace();}}}

工程

链接:https://pan.baidu.com/s/1BwbDrxsoAkLMAvzQwg6kMg
提取码:yhm0

转载于:https://www.cnblogs.com/lzb1234/p/10567353.html

2019.3.20 I/O相关相关推荐

  1. 全国计算机比赛ccf比赛时间,2019年全国青少年信息学奥林匹克相关通知

    2019年全国青少年信息学奥林匹克相关通知 导读:在2月25日,教育部明确指出:全国中学生信息学奥林匹克竞赛为2019年度面向中学生开展的全国性竞赛活动.近期,中国计算机学会(CCF)公布了国际信息学 ...

  2. 18天精读掌握《费曼物理学讲义卷一》 第7天 2019.6.20

    18天精读掌握<费曼物理学讲义卷一> 第7天 2019.6.20 1. 18日掌握<费曼物理学讲义>卷一计划概览 2. 今日学习成 3. 今日时间表 4.Atimelogger ...

  3. 2019/4/20华为西安研究所研发面试 面经

    2019/4/20号面试    24号收到正式offer 一面 半个小时 面试官年纪比较大了,可能是下午,也不太想理我. 自我介绍? 讲第一个项目?他根本不看也不怎么听 讲完说你这个哪里哪里不对,哪里 ...

  4. 【2019.08.20】 python 下载wallhaven壁纸原图, 分别使用同步、异步方式(aiohttp_requests,aiofiles),对比下载速度

    本次主要是研究分别使用同步异步的方式下载壁纸原图 'https://alpha.wallhaven.cc/latest'在速度方面的差异 在解析网页时发现原图url不在图片列表页显示,只显示了小图,在 ...

  5. 【盛派周三分享-2019.2.20】开放分享内容,本期主题:《SCF、DDD及相关架构思想讨论》...

    "周三分享"是盛派网络约定的每周三晚上定时举办的内部分享活动,活动主要由技术人员分享各方面的技术主题,并由所有参与者围绕主题进行讨论.除技术话题外,也可能涉及到相关的设计.财税.金 ...

  6. 【每日早报】2019/11/20

    ✦ 金山办公正式在科创板挂牌交易:上市首日大涨175.5%,总市值达582亿元 ✦ 腾讯发布信息流内容服务品牌"腾讯看点",日活跃用户数达1.85亿 ✦ 拼多多联合农业农村部探索农 ...

  7. ICCV 2019 | VrR-VG:聚焦视觉相关关系

    作者丨梁远智 学校丨西安交通大学硕士生 研究方向丨视觉关系 本文提出视觉相关的对象关系在语义理解上有更高的价值.在视觉关系学习表达中,我们需要关注于视觉相关关系,而避免对于视觉无关的信息学习.由于现有 ...

  8. 论文盘点:ICCV 2019 Top 20,MobileNetV3居首!

    ICCV 是计算机视觉领域三大顶会之一,往届都是奇数年开(与此对应ECCV 在偶数年开,CVPR 每年都开),ICCV 2019 于 2019年10月27日-11月2日召开,距今不足一年. 继盘点CV ...

  9. 2019.08.20【NOIP提高组】模拟 B 组 排序、DP+递推、矩阵乘法+数位DP/类欧

    文章目录 0 旅游(travel) 1 做梦(dream) 2 数数(count) 初见时,她说,"我无力自保,无处可去,无人可依." 多年后,他说,"我教你射箭,你已有 ...

  10. 2019年20个最佳产品信息管理(PIM)软件(一)

    PIM产品信息管理软件几乎可以存储涉及产品的任何信息,例如其描述,定价,产品配置,运输,物流,税收和其他相关项目,包括产品评论.PIM可以帮助你制作和配置无限种类的产品信息.凭借其准确性和灵活性,PI ...

最新文章

  1. Angular getOrCreateInjectable的实现原理调试
  2. Go语言技术教程:Redis介绍安装和使用
  3. 在html中写js提示错误,页面HTML标签优化
  4. ssh框架 验证码实现
  5. java中的volatile变量
  6. Button或者ImageButton的背景设为透明或者半透明
  7. 微软2011 GCR MVP Open Day 之旅!
  8. mac 读写 ntfs
  9. 银行计算机岗位职称,银行职称有哪些,等级是如何划分的
  10. java web开发常见问题_javaWeb开发中常见的问题
  11. Go使用grpc+http打造高性能微服务
  12. cocos2dx入门1:关于Cocos Creator
  13. 2015读过的书与看过的影视资料
  14. 深入Windows开发--Preview and Thumbnail
  15. Java之下载word文档,java企业级应用架构
  16. [第3课] 象形统计图
  17. 基于JavaWeb的健康管理平台-源码+论文
  18. 爬虫之 爬取京东计算机书籍
  19. Kubernetes VS Mesos
  20. Scrapy图片如何下载?ImagePipeline满足你的需求

热门文章

  1. php的toast,toast提示是什么
  2. SSD和内存数据库技术
  3. 基于社交网络的推荐算法
  4. mysql数据库输出数据语法错误_MySQL数据库定义存储过程总是报语法错误的解决方法...
  5. 洛谷分支结构题单前一半 深基例2到例9 P5710 数的性质 P5711 闰年判断 P5712 Apples P5713 洛谷团队系统 P5714 肥胖问题 P5715 三位数排序 P5716月份天数
  6. 陈强教授《机器学习及R应用》课程 第六章作业
  7. Android-DRM详解
  8. 混合基金量化投资策略应该怎么制定?
  9. OpenSTF手机设备管理平台-------二次开发
  10. 使用XPath+Chrome浏览器解析网站的数据