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

2019.3.20 I/O相关的更多相关文章

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

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

  2. Python + Anaconda + vscode环境重装(2019.4.20)

    目录 卸载程序 安装Ananconda 检查系统环境变量 更换国内镜像源 设置VS CODE 用户配置及工作环境配置 @(Python + Anaconda + vscode环境重装) 工程目录的使用 ...

  3. 2019.03.20 mvt,Django分页

    MVT模式   MVT各部分的功能:   M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理.       V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返 ...

  4. 2019.4.18 HTML + CSS相关整理

    目录 标签 块标签 行标签 行块转化 嵌套规则 css引入方式 行间样式 内部引入 外部引入 选择器 基础选择器 组合选择器 盒模型 css样式 字体属性 设置字体的大小 设置字体的粗细 设置字体的风 ...

  5. 【2019.8.20 NOIP模拟赛 T3】小X的图(history)(可持久化并查集)

    可持久化并查集 显然是可持久化并查集裸题吧... 就是题面长得有点恶心,被闪指导狂喷. 对于\(K\)操作,直接\(O(1)\)赋值修改. 对于\(R\)操作,并查集上直接连边. 对于\(T\)操作, ...

  6. 【2019.7.20 NOIP模拟赛 T1】A(A)(暴搜)

    打表+暴搜 这道题目,显然是需要打表的,不过打表的方式可以有很多. 我是打了两个表,分别表示每个数字所需的火柴棒根数以及从一个数字到另一个数字,除了需要去除或加入的火柴棒外,至少需要几根火柴棒. 然后 ...

  7. 2019.6.20 校内测试 NOIP模拟 Day 1 分析+题解

    这次是zay神仙给我们出的NOIP模拟题,不得不说好难啊QwQ,又倒数了~ T1 大美江湖 这个题是一个简单的模拟题.   ----zay 唯一的坑点就是打怪的时候计算向上取整时,如果用ceil函数一 ...

  8. 【2019.3.20】NOI模拟赛

    题目 这里必须标记一下那个傻逼问题,再不解决我人就没了! 先放一个 $T3$ $20$ 分暴力 #include<bits/stdc++.h> #define rep(i,x,y) for ...

  9. 2019.10.20 csp-s模拟测试 lrd试题 反思总结

    赶进度赶进度,丢个代码两三句备注一下完事了. day1: 前面两道题没实际写代码怕印象不深所以描述一下大意. T1: 题目大意:给出两个数&.|.^的结果(可能只给出其中某一项或者某两项),求 ...

随机推荐

  1. github如何上传代码

    别人写的太好了,没必要重写.备份给自己参看. 1.https://www.cnblogs.com/zlxbky/p/7727895.html 2.https://blog.csdn.net/pql92 ...

  2. [GO]map做函数参数

    package main import "fmt" func test(m map[int]string) { delete(m, ) } func main() { m := m ...

  3. 在IE11(Win10)中检查up6.2配置

      1.按F12,打开调试模式    2.打开调试程序选项卡 说明:在调试程序选项卡中可看到IE加载的脚本信息是否正确.因为IE有缓存,导致脚本有时不是最新的.    3.打开脚本,up6.js   ...

  4. 第06章-渲染Web视图

    1. 理解视图解析 将控制器中请求处理的逻辑和视图中的渲染实现解耦是Spring MVC的一个重要特性.如果控制器中的方法直接负责产生HTML的话,就很难在不影响请求处理逻辑的前提下,维护和更新视图. ...

  5. MongoDB整理笔记の管理Sharding

    1.列出所有的Shard Server > db.runCommand({ listshards: 1 }) --列出所有的Shard Server { "shards" : ...

  6. SxsTrace使用的方法

    Windows7平台上有一个强大的SxsTrace工具,可以跟踪调试应用程序运行时需要的动态库的版本和路径.   SxsTrace使用的方法:   1.首先必须以Administrator用户身份登录 ...

  7. JS Img对象获取图片高度宽度(兼容Chrome)

    一般获取图片高度宽度的写法: var img = new Image();img.src = imgsrc;var imgWH = CalcImgTiple(img.width, img.height ...

  8. SQL server T-sql语句查询执行顺序

    前言 数据库的查询执行,毋庸置疑是程序员必备的技能之一,然而数据库查询执行的过程绚烂多彩,却是很少被人了解,今天我们来深入了解下sql查询的来龙去脉,为查询的性能优化打个基础 这篇博客,摒弃查询优化性 ...

  9. 20165219 2017-2018-2《Java程序设计》课程总结

    20165219 2017-2018-2<Java程序设计>课程总结 一.每周作业链接汇总 20165219 我期望的师生关系 20165219学习基础与C语言基础调查 20165219 ...

  10. Mongoid Relationships

    1:1 embedded relationship: M:1 linked relationship(one_direction): child uses belongs_to parent uses ...