java IO–简单介绍应用
什么是IO流
用来进行输入输出操作的流就称为IO流。 换句话说,IO流就是以流的方式进行输入输出.
IO体系
[
1、文件(file):FileInputStream、FileOutputStream、FileReader、FileWriter
2、数组([]):
- 2.1、字节数组(byte[]):ByteArrayInputStream、ByteArrayOutputStream
- 2.2、字符数组(char[]):CharArrayReader、CharArrayWriter
3、管道操作:PipedInputStream、PipedOutputStream、PipedReader、PipedWriter
4、基本数据类型:DataInputStream、DataOutputStream
5、缓冲操作:BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter
6、打印:PrintStream、PrintWriter
7、对象序列化反序列化:ObjectInputStream、ObjectOutputStream
8、转换:InputStreamReader、OutputStreamWriter
9、字符串(String:StringBufferInputStream、StringBufferOutputStream、StringReader、StringWriter
从数据传输方式看,可以将 IO 类分为:
- 1、字节流(字节流是给机器看的)—支持所有格式
- 2、字符流(字符流是给人看的)–支持处理文本文件
字节流是以一个字节单位来运输的,比如一杯一杯的取水。而字符流是以多个字节来运输的,比如一桶一桶的取水,一桶水又可以分为几杯水。
常用的类:如文件最基本的读写类 File 开头的、文件读写带缓冲区的类 Buffered 开头的类,对象序列化反序列化相关的类 Object 开头的类。
IO类和相关方法
最基本的是 4 个抽象类:InputStream、OutputStream、Reader、Writer。最基本的方法也就是一个读 read() 方法、一个写 write() 方法。具体的实现还是要看继承这 4 个抽象类的子类
InputStream 类
Outputstream
Reader
writer
具体api功能请查看api文档
案例
把list中的元素添加到txt文件中
package lqh.IO;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
public class ArrayListToFileDemo {
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new FileWriter("E:\\txt\\java1.txt"));
ArrayList<Student> arrayList = new ArrayList<Student>();
Student s1 = new Student(1, "林枪侠", 12, "河南郑州");
Student s2 = new Student(2, "林侠", 21, "河南周口");
Student s3 = new Student(3, "林枪", 23, "河南新乡");
Student s4 = new Student(4, "枪侠", 24, "河南洛阳");
arrayList.add(s1);
arrayList.add(s2);
arrayList.add(s3);
arrayList.add(s4);
for (Student s : arrayList
) {
StringBuilder sb = new StringBuilder();
sb.append(s.getSid()).append(s.getName()).append(s.getAge()).append(s.getAddress());
bw.write(sb.toString());
bw.newLine();
bw.flush();
}
bw.close();
}
}
class Student {
private String name;
private int sid;
private int age;
private String address;
public Student() {
}
public Student(int sid, String name, int age, String address) {
this.sid = sid;
this.address = address;
this.age = age;
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getSid()
{
return sid;
}
public void setSid(int sid)
{
this.sid = sid;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
复制视频
package lqh.IO;
import java.io.*;
public class BufferStreamDemo {
public static void main(String[] args) throws IOException {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("E:\\java\\0907.mp4"));
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\txt\\0907.mp4"));
byte[] by = new byte[1024];
int len;
while ((len = bis.read())!=-1){
bos.write(len);
}
bos.close();
bis.close();
}
}
//不使用缓冲流
public void test14() throws IOException {
// 输入和输出都不使用缓冲流
FileInputStream in = new FileInputStream("E:\\视频资料\\大数据原理与应用\\1.1大数据时代.mp4");
FileOutputStream out = new FileOutputStream("1.1大数据时代.mp4");
int len = 0;
byte[] bs = new byte[1024];
long begin = System.currentTimeMillis();
while ((len = in.read(bs)) != -1) {
out.write(bs, 0, len);
}
System.out.println("复制文件所需时间:" + (System.currentTimeMillis() - begin)); // 平均时间 700 多毫秒
in.close();
out.close();
}
out.write(bs, 0, len);
}
System.out.println("复制文件所需时间:" + (System.currentTimeMillis() - begin)); // 平均时间 700 多毫秒
in.close();
out.close();
}