学习总结
IO流
分类;
处理数据:字符流,字节流
数据流向:输入流,输出流
字符流基于字节流
字符流
1·以字符为单位
2.只能处理字符类型数据
3.会用到缓冲区
字节流
1·以字节为单位
2能处理所有类型的数据
3.不会用到缓冲区,直接在文件里操作
优先选择字节流
输入流和输出流
输入是进行读
输出是进行写
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UpQjXpq7-1626701266126)(C:\Users\HuEris\AppData\Roaming\Typora\typora-user-images\image-20210718155046421.png)]
InputStream
1.是所有输入字节流的父类,是一个抽象类
2.介质流
ByteArrayInputStream 从Byte数组
StringBufferInputStream StringBuffer
FileInputStream 本地文件
PipedInputStream 从与其它线程共用的管道中读取数据
3.装饰流
ObjectInputStream
FilterInputStream所有的子类
4.文件分离器File.separator
作用相当于 ’ ’ 在 windows 中 文件文件分隔符 用 ’ '
5.读文件内容可能大可能小
先知道文件路径
实例化File
实例化文件输出流
/**
* 字节流
* 读文件内容,节省空间
* */
import java.io.*;
class hello{
public static void main(String[] args) throws IOException {
String fileName="D:"+File.separator+"hello.txt";
File f=new File(fileName);
InputStream in=new FileInputStream(f);
byte[] b=new byte[(int)f.length()];//文件内容
in.read(b);
System.out.println("文件长度为:"+f.length());
in.close();
System.out.println(new String(b));
}
}
6.不知道文件大小
int count =0;
int temp=0;
while((temp=in.read())!=(-1)){
b[count++]=(byte)temp;
}
注意:当读到文件末尾的时候会返回-1.正常情况下是不会返回-1的。
DataInputStream
DataInputStream input = new DataInputStream(new FileInputStream(file));
char[] ch = new char[10];
int count = 0;
char temp;
while((temp = input.readChar()) != 'C'){
ch[count++] = temp;
}
OutputStream
1.输出字节流的父类,抽象类
2。介质流
ByteArrayOutputStreamByte 向数组写入数据
FileOutputStream 本地文件写入数据
3.装饰流
ObjectOutputStream
FilterOutputStream的子类都是装饰流。
管道流
/**
* 测试类
* */
class hello{
public static void main(String[] args) throws IOException {
Send send=new Send();
Recive recive=new Recive();
try{
//管道连接
send.getOut().connect(recive.getInput());
}catch (Exception e) {
e.printStackTrace();
}
new Thread(send).start();
new Thread(recive).start();
}
压缩文件
具体看:https://www.cnblogs.com/QQ846300233/p/6046388.html
PrintStream
outputStream 屏幕输出
1.system.in
2.system.out
3.system.err( System.err.println(
“这些在文件中才能看到哦!”``);)
字符输入流
Reader输入字符流父类
介质流;
CharReader char数组
StringReader String中
PipedReader 是从与其它线程共用的管道中读取数据。
BufferedReader 很明显就是一个装饰器,它和其子类负责装饰其它Reader 对象。
FilterReader 是所有自定义具体装饰流的父类,其子类PushbackReader 对Reader 对象进行装饰,会增加一个行号。
InputStreamReader 是一个连接字节流和字符流的桥梁,它将字节流转变为字符流。
FileReader可以说是一个达到此功能、常用的工具类。
循环判断是否结束,不知道文件有多大
字符输出流
Writer 是所有的输出字符流的父类,它是一个抽象类。
介质流
CharArrayWriter、Char 数组
StringWriter 、String 中写入数据。
PipedWriter 是向与其它线程共用的管道中写入数据,
BufferedWriter 是一个装饰器为Writer 提供缓冲功能。
PrintWriter 和PrintStream 极其类似,功能和使用也非常相似。
OutputStreamWriter 是OutputStream 到Writer 转换的桥梁,它的子类FileWriter 。
向文件写入数据
/**
* 字符流
* 写入数据
* */
import java.io.*;
class hello{
public static void main(String[] args) throws IOException {
String fileName="D:"+File.separator+"hello.txt";
File f=new File(fileName);
Writer out =new FileWriter(f);
String str="hello";
out.write(str);
out.close();
}
}
Writer out =new FileWriter(f,true);
追加数据、换行
使用“\r\n”
比如将str变为String str="\r\nhello";
字符和字节转换
具体的对象体现:
InputStreamReader:字节到字符的桥梁 读入
OutputStreamWriter:字符到字节的桥梁 写出
File类
(https://www.cnblogs.com/QQ846300233/p/6046388.html)