流(IO流)
概念:传输数据的管道
作用:传输数据
将数据从其他地方,如内存,文件,电脑等地方传输给程序
或
将数据从程序传输到别的地方,如内存,文件,电脑等地方
分类
按照流向分类
输入流:
将数据从其他地方,如内存,文件,电脑等地方传输给程序
输出流:
将数据从程序传输到别的地方,如内存,文件,电脑等地方
按照传输的数据最小单位分类
字节流:
传输的数据最小单位是byte
可以传输任何一种数据
字符流:
传输的数据最小单位是char
只能传输文本内容,但不能传输音频,视屏,图片等数据
按功能分类
节点流:
不会对数据加工
过滤流:
会对数据加工
字节流
InputStream:所有字节输入流的父类,是一个抽象类(无法直接创建对象)
OutStream: 所有字节输入流的父类,是一个抽象类 (无法直接创建对象)
常用的子类
文件字节流
作用:
将文件数据输入(读入)到程序中
或
将程序中的数据输出(写出)到文件中
FileInputStream:将文件数据输入(读入)到程序中的流
例1
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
/**
* 文件字节码输入流(FileInputSream)
* 将电脑上或其他地方的文件(输入)读入到程序中
*
* 下例为读取电脑上的一篇文档到程序
*/
public class Test01 {
public static void main(String[] args) throws IOException {
FileInputStream stream = new
FileInputStream("C:\\Users\\LI\\Desktop\\我的口袋\\周测\\test_3.txt");
byte[] arr = new byte[1024];
int len = 0;
while ((len = stream.read(arr)) != -1) {
//将字节码数组转为字符串
String str = new String(arr,0,len);
System.out.println(str);
}
//关闭流
stream.close();
}
}
FileOutputStream: 将程序中的数据输出到文件中的流
例2
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 文件字节码输出流(FileOutStream)
* 将程序中的数据输出到文件中的流
*
* 下例为将程序中的一段字符串数据输出(写入)到文件中
*/
public class Demo03 {
public static void main(String[] args) throws IOException {
/**
* 在创建时
* 如果指定的文件不存在则会创建该文件
* 如果指定的文件存在,那么会先删除原来的文件,再创建
*/
// FileOutputStream fos = new FileOutputStream(一参,二参);
/**
* 1参:要输出到的文件位置
* 2参:是否给原内容追加,true表示追加,false覆盖
* 在创建时
* 如果指定的文件不存在则会创建该文件
* 如果指定的文件存在,则直接使用,并将写入的内容追加到原内容的尾部
*/
FileOutputStream fos = new FileOutputStream("D://1.txt", false);
String str = "这是通过程序写入的内容";
//将字符串转化为字节码数组
byte[] bs = str.getBytes();
//使用输出流给文件中写入内容
//参数:要写入到文件中的字节码数组
fos.write(bs);
//冲刷
fos.flush();
//关流
fos.close();
System.out.println("OVER");
}
}
例3
拷贝文件
/**
* 文件的拷贝
*/
public class Demo04 {
public static void main(String[] args) throws IOException {
/**
* 分析:
* 文件输入流
* 将文件中的内容读取到程序中
* 文件输出流
* 将程序中的数据输出到文件中
*/
FileInputStream fis = new FileInputStream("D:\\Java备课\\西安前8周week_test\\前8周week_test\\test_1.txt");
FileOutputStream fos = new FileOutputStream("D:\\第一周考试题.txt");
byte[] b = new byte[1024];
int len = 0;
while((len = fis.read(b)) != -1) {
fos.write(b, 0, len);
fos.flush();
}
fos.close();
fis.close();
}
}
InputStream提供的方法(字节流)
int read();
读取到的数据,返回值就是读取到的数据
int read(byte b[ ]);
读取多个数据到数组b中,返回值就是该数组的字节长度
注意:如果返回值为-1表示读取结束
int read(byte b[ ],int off,int len);
读取多个数据到数组b中,从off位置开始存放,存放len个字节数据,返回值是该数组的字节长度
void close();
关闭流
OutStream提供的方法(字节流)
void write(int b);
输出一个字节数据,参数就是输出的字节数据
void write(byte b[ ]);
输出一组字节数据,参数就是输出的字节数据数组
void write(byte b[ ] ,int off,int len);
将参数b中的数据从off位置开始向外输出len个
void flush();
冲刷,保证管道没有残留的数据
void close();
关闭流
内存流
将数据读取到内存中,或将数据从内存中取出
ByteArrayInputStream
ByteArrayOutputStream
toByteArray();获取内存流连接的内存中的数据
缓冲流
作用:提高读写效率
BufferedInputStream
BufferedOutputStream
注意:该流是过滤流
对象流
作用:将对象存储到文件中,获将文件中存储的对象读取到程序中
ObjectInputStream
ObjectOutputStream
注意:
1、static修饰的属性不能被序列化
2、版本号除了能让程序员与程序员沟通外,其他没有任何作用
3、存储的对象中的所有属性的数据类型都必须实现Serializable接口
4、transient修饰的属性称为瞬时属性,不参与序列化
标准输出流
PrintStream
字符流
特点:传输的最小单位是char(字符)
父类
Reader(抽象类)
read();
read(char[ ] b);
read(char[ ] b,int off,int len);
close();
Writer(抽象类)
write(int b);
write(char[ ] b);
write(char[ ] b ,int off,int len);
flush();
close();
常用子类
文件流
Filereader
Filewriter
缓冲流
BufferedReader
特有方法:readline(); 读取一行
转换流
InputStreamReader
OutputStreamWriter