2019.3.20 I/O相关
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相关的更多相关文章
- 【盛派周三分享-2019.2.20】开放分享内容,本期主题:《SCF、DDD及相关架构思想讨论》
“周三分享”是盛派网络约定的每周三晚上定时举办的内部分享活动,活动主要由技术人员分享各方面的技术主题,并由所有参与者围绕主题进行讨论.除技术话题外,也可能涉及到相关的设计.财税.金融.政策等方面的延伸 ...
- Python + Anaconda + vscode环境重装(2019.4.20)
目录 卸载程序 安装Ananconda 检查系统环境变量 更换国内镜像源 设置VS CODE 用户配置及工作环境配置 @(Python + Anaconda + vscode环境重装) 工程目录的使用 ...
- 2019.03.20 mvt,Django分页
MVT模式 MVT各部分的功能: M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理. V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返 ...
- 2019.4.18 HTML + CSS相关整理
目录 标签 块标签 行标签 行块转化 嵌套规则 css引入方式 行间样式 内部引入 外部引入 选择器 基础选择器 组合选择器 盒模型 css样式 字体属性 设置字体的大小 设置字体的粗细 设置字体的风 ...
- 【2019.8.20 NOIP模拟赛 T3】小X的图(history)(可持久化并查集)
可持久化并查集 显然是可持久化并查集裸题吧... 就是题面长得有点恶心,被闪指导狂喷. 对于\(K\)操作,直接\(O(1)\)赋值修改. 对于\(R\)操作,并查集上直接连边. 对于\(T\)操作, ...
- 【2019.7.20 NOIP模拟赛 T1】A(A)(暴搜)
打表+暴搜 这道题目,显然是需要打表的,不过打表的方式可以有很多. 我是打了两个表,分别表示每个数字所需的火柴棒根数以及从一个数字到另一个数字,除了需要去除或加入的火柴棒外,至少需要几根火柴棒. 然后 ...
- 2019.6.20 校内测试 NOIP模拟 Day 1 分析+题解
这次是zay神仙给我们出的NOIP模拟题,不得不说好难啊QwQ,又倒数了~ T1 大美江湖 这个题是一个简单的模拟题. ----zay 唯一的坑点就是打怪的时候计算向上取整时,如果用ceil函数一 ...
- 【2019.3.20】NOI模拟赛
题目 这里必须标记一下那个傻逼问题,再不解决我人就没了! 先放一个 $T3$ $20$ 分暴力 #include<bits/stdc++.h> #define rep(i,x,y) for ...
- 2019.10.20 csp-s模拟测试 lrd试题 反思总结
赶进度赶进度,丢个代码两三句备注一下完事了. day1: 前面两道题没实际写代码怕印象不深所以描述一下大意. T1: 题目大意:给出两个数&.|.^的结果(可能只给出其中某一项或者某两项),求 ...
随机推荐
- MVC 知识点随笔
1.https://msdn.microsoft.com/zh-cn/gg981918 <text></text> 等同于 @:
- 专题1-MMU-lesson2-深入剖析地址转化
1.地址转化总体分析 level one fetch和level two fetch分为一级转换和二级转换. 由上图右边可以看出,首先通过TTB(Translation Table Base)寄存器找 ...
- sqlServer通过指定的起始时间,创建该时间段内以年、月、日为时间段的临时表
通过指定的起始时间,创建该时间段内以年.月.日为时间段的临时表 ALTER PROCEDURE [dbo].[YOUR_SP_Name] -- Add the parameters for t ...
- HTML5之:link与title的区别
[link]标签:外联导入样式 例1:<link rel="stylesheet" type="text/css" href="theme.cs ...
- 编写高质量代码改善C#程序的157个建议——建议29:区别LINQ查询中的IEnumerable<T>和IQueryable<T>
建议29:区别LINQ查询中的IEnumerable<T>和IQueryable<T> LINQ查询一共提供了两类扩展方法,在System.Linq命名空间下,有两个静态类:E ...
- VS2013安装及破解教程
https://blog.csdn.net/qq_33742119/article/details/80075352 软件下载的百度云链接,也可以在官网直接下载 链接:https://pan.baid ...
- 创建Oracle synonym 详解
--创建使用同义词 --同义词就是给表.视图等对象取得别名,用于简化对其的访问 --分为2种: --私有同义词:用户自己创建自己使用的 --公共同义词:dba创建,给其它用户使用的 --为dept_s ...
- eclipse的一些快捷键记录
查看所有快捷键:Ctrl + Shift + L Ctrl + Shift + F:格式化(关闭搜狗输入法的所有快捷键) Alt + /:智能提示,自动补全 Ctrl + / :添加单行注释(取消:C ...
- nandflash之基本特性
nandflash作为嵌入式中的”磁盘”, 被广泛的应用, 以(K9F2G08U0B)为例,其他型号都差不多 nandflash的结构 nandflash的结构有页(page), block(块)的概 ...
- js 三大事件(鼠标.键盘.浏览器)
鼠标事件: click:单击 dblclick:双击 mousedown:鼠标按下 mouseup:鼠标抬起 mouseover:鼠标悬浮(进入) mouseout:鼠标离开(离开) mousemov ...