1.字节流  字符流    2.read()  3.-1  4.System.out  5.InputStream  6.OutputStream

1.IO流按流向分为输入流和输出流,即输入流和输出流都属于IO流。输入流是将数据从硬盘读到内存中,输出流是将数据从内存写到内存中。

IO流按操作类型分为字节流和字符流,字节流和字符流都属于IO流。字节流可以操作任何数据,因为在计算机中任何类型的数据都是以字节存储的。字符流只能操作纯字符数据。字节流直接与数据产生交互,而字符流是将字符转成字节从硬盘读到内存中再将字节转成字符写到内存中。

2.FileInputStream和FileOutputStream:FileInputStream的read()方法一个从文件中读一个字节,返回给程序一个字节,读取文件的次数多,效率低;FileOutputStream的write()方法一次向文件中写入一个字节,写出文件的次数多,效率低。

BufferedInputStream和BufferedOutputStream:BufferedInputStream内置一个缓冲区(数组),BufferedInputStream会一次性从文件中读取8192个字节存在缓冲区中,返回给程序一个,直到缓冲区中所有的都被使用过,才会从文件中重新读取8192个;BufferedOutputStream也内置一个缓冲区(数组),程序向流中写出字节时,会先写到缓冲区中,直到缓冲区写满,BufferedOutputStream才会把缓冲区中的数据一次性写到文件里。

FileReader和FileWriter:FileReader的read()方法可以先读取到字节文件再转为字符,FileWriter的write()方法可以自动将字符转为字节写出。

BufferedReader和BufferedWriter:BufferedReader的read()方法读取字符时会一次读取若干字符到缓冲区,然后逐个返回给程序降低读取文件的次数,提高效率。BufferedWriter的write()方法写出字符时会先写到缓冲区,缓冲区写满时会写到文件,降低写文件的次数,提高效率。

InputStreamReader和OutputStreamWriter:可以使用指导码表读取和写出文件,InputStreamReader是从字节流到字符流的桥梁(in,charset),OutputStreamWriter是从字符流到字节流的桥梁(out,charset)

3.缓冲流的优点是降低了读取和写入文件的次数,提高了效率。缓冲流是在流中内置一个缓冲区,当程序读取文件或向程序写入文件时,必须等到缓冲区满了之后一次性读取或写入,这样便降低了读取和写入文件的次数。

package com.zuikc.kehoutest;

public class Test7 {
/*
* 需求:实现字符串和字节数组之间的相互转换。必如将字符串“北京最课程bjzkc”转换为字节数组,并将字节数组再转换回字符串。
*/
public static void main(String[] args) {
String str = "北京最课程bjzkc";
byte[] arr = str.getBytes();
System.out.println(arr);
String str2 = new String(arr);
System.out.println(str2);
} }
package com.zuikc.kehoutest;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; public class Test8 {
/*
* 需求:分别使用文件流和缓冲流复制一个长度大于100MB的视频文件,并观察效率的差异。
*/
public static void main(String[] args) throws IOException {
// demo1();
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("教父.rmvb"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("xxx.rmvb"));
int b;
while((b = bis.read()) != -1) {
bos.write(b);
} bis.close();
bos.close();
} private static void demo1() throws FileNotFoundException, IOException {
FileInputStream fis = new FileInputStream("教父.rmvb");
FileOutputStream fos = new FileOutputStream("xxx.rmvb");
int b;
while((b = fis.read()) != -1) {
fos.write(b);
} fis.close();
fos.close();
} }
package com.zuikc.kehoutest;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList; public class Test9 {
/*
* 需求:使用IO包中的类读取D盘上exam.txt文本文件的内容,每次读取一行内容,将每行作为一个输入放入ArrayList的泛型集合中并将集合中的内容使用加强for进行输出显示。
*/
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("D:\\exam.txt"));
ArrayList<String> list = new ArrayList<>();
String line;
while((line = br.readLine()) != null) {
list.add(line);
}
for (String string : list) {
System.out.println(string);
}
} }
package com.zuikc.bean;

public class Student implements Comparable<Student>{
private int id;
private String name;
private int age;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
}
@Override
public int compareTo(Student s) { return this.age - s.age;
} } package com.zuikc.kehoutest; import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner; public class Test10 {
/*需求:
* 由控制台按照固定格式输入学生信息,包括学号,姓名,年龄信息,当输入的内容为exit退出;
* 将输入的学生信息分别封装到一个Student对象中,再将每个Student对象加入到一个集合中,要求集合中的元素按照年龄大小正序排序;
* 最后遍历集合,将集合中学生信息写入到记事本,每个学生数据占单独一行。
*/
public static void main(String[] args) throws IOException {
HashSet<Student> hs = new HashSet<>();
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生信息(学号#姓名#年龄):");
while(true) {
String line = sc.nextLine();
if ("quit".equals(line)) {
break;
}
String[] info = line.split("#");
Student stu = new Student(Integer.parseInt(info[0]), info[1],Integer.parseInt(info[2]));
hs.add(stu);
} BufferedWriter bw = new BufferedWriter(new FileWriter("stu.txt"));
Iterator<Student> it = hs.iterator();
while (it.hasNext()) {
String info2 = it.next().toString();
bw.write(info2);
bw.newLine();
}
bw.close();
} }

day22-23作业的更多相关文章

  1. C语言基础 (12) 文件的操作 FILE

    课程回顾 结构体基本操作: 结构体类型的定义 // struct为关键字 Stu为自定义标识符 // struct Stu才是结构体类型 // 结构体成员不能在定义类型时赋值 struct Stu { ...

  2. 团队作业8——第二次项目冲刺(Beta阶段)--5.23 third day

    团队作业8--第二次项目冲刺(Beta阶段)--5.23 third day Day three: 会议照片 项目进展 今天是beta冲刺的第三天,组长回到了队伍当中,正式开始改进alpha中存在的功 ...

  3. 与左侧的 圆括号“(”(位于“e:\大二上课程课件、作业和答案\数据结构\chapter4\sqstack\sqstack\mysqstack.h(23)”)匹配之前遇到文件结束

    错误原因是“某对圆括号只打了左括号而没有右括号”,debug方法是:直接根据报错提示:“与左侧的 圆括号“(”(位于“e:\大二上课程课件.作业和答案\数据结构\chapter4\sqstack\sq ...

  4. 9月23日JavaScript作业----日期时间选择

    作业二:日期时间选择 <div style="width:600px; height:100px;"> <select id="year"&g ...

  5. 9月23日JavaScript作业----两个列表之间移动数据

    作业一:两个列表之间数据从一个列表移动到另一个列表 <div style="width:600px; height:500px; margin-top:20px"> & ...

  6. 团队作业8——第二次项目冲刺(Beta阶段)Day5--5.23

    1.提供当天站立式会议照片一张 2.会议内容 讨论已完成的功能 对于界面,谈谈各自的看法 商定测试计划 用户需求进一步调研 3.工作安排 队员 今日任务 明日任务 贡献比 林燕 测试运行效果 根据测试 ...

  7. 团队作业8----第二次项目冲刺(beta阶段)5.23

    Day5-05.23 1.每日会议 会议内容: 1.组长林乔桦对昨日的工作进行了总结并且安排今日的任务. 2.潘益靖副组长说明昨日任务的完成情况. 3.组员对昨天的各项工作进行了汇报以及对今天的工作进 ...

  8. 团队作业4——第一次项目冲刺(Alpha版本) 4.23

    团队作业4--第一次项目冲刺(Alpha版本) Day two: 会议照片 每日站立会议: 项目进展 今天是项目的Alpha敏捷冲刺的第二天,先大概整理下昨天已完成的任务以及今天计划完成的任务.今天主 ...

  9. 团队作业4——第一次项目冲刺(Alpha版本)4.23

    ·本次会议为第二次Scrum Meeting会议~ ·本次会议项目经理召开时间为17:00,在教学楼教室召开,召开时长约30分钟,探讨了昨日任务的进展.查重功能.今日要做的任务以及后续所要开展的工作. ...

  10. 团队作业4——第一次项目冲刺(Alpha版本) 2017.4.23

    本次会议为第二次Scrum Meeting会议~ 由于本次会议项目经理召开时间为10:30,在五社区会五号楼召开,召开时长约30分钟,对昨天的工作进行了总结并分配了今天的任务. 1.站立式会议照片(拍 ...

随机推荐

  1. stylus-loader (copy)

    https://blog.csdn.net/xqnode/article/details/59777793 "stylus-loader": "^2.5.0", ...

  2. InputStream流无法重复读取的解决办法

    前言:今天工作的需要需要读取aws云上S3桶里面的PDF数据,第一步能够正常的获取PDF文件的InputStream流,然后,我为了测试使用了IOUtils.toString(is)将流System. ...

  3. vue.js 添加 fastclick的支持 处理移动端click事件300毫秒延迟

    fastclick:处理移动端click事件300毫秒延迟. 1,先执行安装fastclick的命令 npm install fastclick 2,在main.js中引入,并绑定到body. imp ...

  4. 架构师成长之路1.2-多功能系统信息统计工具dstat

    点击返回架构师成长之路 架构师成长之路1.2-多功能系统信息统计工具dstat dstat命令是一个用来替换vmstat.iostat.netstat.nfsstat和ifstat这些命令的工具,是一 ...

  5. 【转】MPU6050的数据获取、分析与处理

    摘要 MPU6050是一种非常流行的空间运动传感器芯片,可以获取器件当前的三个加速度分量和三个旋转角速度.由于其体积小巧,功能强大,精度较高,不仅被广泛应用于工业,同时也是航模爱好者的神器,被安装在各 ...

  6. 【转】在windows中使用Intellij Idea时选择自定义的64位JVM

    原文地址:https://www.iflym.com/index.php/code/201404190001.html 本文英文原文自:https://intellij-support.jetbrai ...

  7. 【CH4201】楼兰图腾

    题目大意:给定一个长度为 N 的序列,从序列中任意挑出三个数,求满足中间的数字值最小(最大)有多少种情况. 题解:建立在值域上的树状数组,从左到右扫描一遍序列,统计出每个点左边有多少个数大于(小于)该 ...

  8. isspace 对含有中文 的字符串进行检查的时候表现不正常!?

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> ...

  9. 8: springMVC ModelAndView 作用与功能解析

    Spring mvc视图机制 所有的web应用的mvc框架都有它定位视图的方式.Spring提供了视图解析器供你在浏览器中显示模型数据,而不必被拘束在特定的视图技术上. Spring的控制器Contr ...

  10. 「Vue」vue cli3项目打包为APP方法及坑点

    1.执行npm run build之后生成dist文件夹 2.打开HBuilderX新建一个APP项目 3.把dist文件夹里的所有文件拷贝替换到APP文件夹下 4.打开manifest.json文件 ...