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. 微信小游戏 4M升8M分包加载

    一.微信分包加载 微信分包加载教程 嘛,因为原来的4M太小了,满足不了小游戏内容的需求,现在提升到了8M.这8M可以分包加载,而不需要一次性加载8M. 如果是老版本,则分包加载不起作用,会一次加载8M ...

  2. ESLint的使用

    ESLint是在ECMAScript/JavaScript代码中识别和报告模式匹配的工具,它的目标是保证代码的一致性和避免错误.在许多方面,它和JSLint.JSHint相似,除了少数的例外: ESL ...

  3. Mouse Hunt CodeForces - 1027D(思维 找环)

    Medicine faculty of Berland State University has just finished their admission campaign. As usual, a ...

  4. 浅谈范德蒙德(Vandermonde)方阵的逆矩阵的求法以及快速傅里叶变换(FFT)中IDFT的原理

    浅谈范德蒙德(Vandermonde)方阵的逆矩阵与拉格朗日(Lagrange)插值的关系以及快速傅里叶变换(FFT)中IDFT的原理 标签: 行列式 矩阵 线性代数 FFT 拉格朗日插值 只要稍微看 ...

  5. 【JLOI 2012】时间流逝(期望,树上高斯消元)

    题目链接 这是一道传统的期望题,可是有一些套路值得我去掌握. 我们用$s$来表示一种状态,就是当前拥有的能量圈,是一个正整数拆分的形式. 用$f_{s}$表示如果遇到果冻鱼后丢掉了最小的能量圈后的状态 ...

  6. luogu3778/bzoj4898 商旅 (floyd+分数规划+spfa)

    首先floyd求出来每两点间的最短距离,然后再求出来从某点买再到某点卖的最大收益 问题就变成了找到一个和的比值最大的环 所以做分数规划,二分出来那个答案r,把边权变成w[i]-r*l[i],再做spf ...

  7. 上传文件到aws的s3存储

    只要有aws-cli客户端就可以上传文件到aws的S3存储.可以在任意机器上.这里以centos为例. 1.安装python.pip. # yum install -y python python-p ...

  8. Libre 6010「网络流 24 题」数字梯形 (网络流,最大费用最大流)

    Libre 6010「网络流 24 题」数字梯形 (网络流,最大费用最大流) Description 给定一个由n 行数字组成的数字梯形如下图所示.梯形的第一行有m 个数字.从梯形的顶部的m 个数字开 ...

  9. Java Try-with-resources

    目录 资源管理与 Try-Catch-Finally,旧风格 Try-with-resources 管理多个资源 自定义 AutoClosable 实现 Try-with-resources 是 ja ...

  10. Docker应用五:使用Dockerfile部署MongoDB

    在Docker容器中部署MongoDB 不做铺垫,直接开撸: 一.软件准备: docker(已安装) MongoDB-3.2.0.tgz 二.准备配置文件mongo.conf port=27017 d ...