IO流
用于文件传输,先进先出原则传输数据
IO流的分类:
按照流向分:输入流,输出流
按操作单元分:字节流,字符流
按功能分:节点流,功能流
分类之间是相辅相成的,互不冲突
字节流:重点 功能属:节点流
InputStream 字节输入流
此抽象类是表示字节输入流的所有类的超类。
FileInputStream 从文件系统中的某个文件中获得输入字节。OutputStream 字节输出流
public class ByteDemo01 {
public static void main(String[] args) throws IOException {
//1.建立联系
File src=new File("D:/test.txt");
//2.选择流
InputStream is=new FileInputStream(src);
//3.操作 读入
/*read() 每次从输入流中读入一个字节的内容,想要读入多个 手动一个字节一个字节读入
* int num=is.read();
System.out.println((char)num);
System.out.println((char)(is.read()));
System.out.println((char)(is.read()));*/
//重复读取 不确定次数
int num=-1;
while((num=is.read())!=-1){
System.out.println((char)num);
}
//4.关闭
is.close();
}
}
字符流:属功能流,能够读取纯文本的内容
Reader 字符输入流
Write 字符输出流
FileReader 文件字符输入流
FileWrite 文件字符输出流
public class CharDemo01 {
public static void main(String[] args) throws IOException {
//1.选择流
Reader read=new FileReader("D:/hehe.txt");
//2.准备卡车
char[] car=new char[1024];
//3.读入
// System.out.println((char)(read.read()));
int len=-1;
while((len=read.read(car))!=-1){
System.out.println(new String(car,0,len));
}
//4.关闭
read.close();
}
}
缓冲流:提高性能
字符缓冲流:
bufferedReader输入缓冲流 -->新增方法
readLine()一次读一行字符
bufferedWriter输出缓冲流 -->新增方法
newLine写出换行符`
包裹节点流,在节点流上–>节点流|处理流
作用:增强功能,提高性能,只能在节点流之外才能使用,不能代替节点流。
Data流:基本数据类型流,读入写出带有数据类型的数据和字符串数据
DataOutputStream数据输出流–>新增方法:
read xxx()
DataInputStream数据输入流 -->新增方法:
Write xxx()
public class DataDemo {
public static void main(String[] args) throws IOException {
// write("D:/haha.txt");
read("D:/hehe.txt");
}
//读取带有基本数据类型+字符串的数据
public static void read(String pathname) throws IOException{
//1.输入流
DataInputStream in=new DataInputStream(new BufferedInputStream(new FileInputStream(pathname)));
//2.读入 读入和写出顺序要保持一致
int i=in.readInt();
double d=in.readDouble();
boolean b=in.readBoolean();
String s=in.readUTF();
System.out.println(i+"-->"+d+"-->"+b+"-->"+s);
//3.关闭
in.close();
}
//写出带有基本数据类型的数据
public static void write(String pathname) throws IOException{
//1.输出流 可以写出基本数据类型的数据
DataOutputStream out=new DataOutputStream(new BufferedOutputStream(new FileOutputStream(pathname)));
//2.准备数据
int i=123;
double d=123.123;
boolean b=false;
String s="哈哈";
//3.写出
out.writeInt(i);
out.writeDouble(d);
out.writeBoolean(b);
out.writeUTF(s);
//4.刷出
out.flush();
//5.关闭
out.close();
}
}