- I 表示intput , 是数据从硬盘文件读入到内存的过程,称为输入,负责读
- O表示output, 是内存程序的数据从内存写出到硬盘文件的过程.称为输出,负责写.
总结流的四大类:
- 字节输入流: 把来自磁盘文件或网络中的数据以字节的方式读入到内存中去的流称为字节输入流
- 字节输出流:把内存中的数据以字节写出到磁盘文件或者网络中去的称为字节输出流
- 字符输入流:把来自磁盘文件或网络中的数据以字符的方式读入到内存中去的流称为字符输入流
- 字符输出流:把内存中的数据以字符写出到磁盘文件或者网络中去的流称为字符输出流
FileInputStream:
FileInputStream(File file) | 通过打开与实际文件的连接来创建 FileInputStream ,该文件由文件系统中的 File 对象 file 命名 |
FileInputStream(String name) | 通过打开与实际文件的连接来创建 FileInputStream ,该文件由文件系统中的路径名 name 命名 |
read() | 从此输入流中读取一个字节的数据。 |
read(byte[] b) | 从此输入流 b.length 最多 b.length 字节的数据读 b.length 字节数组 |
read(byte[] b, int off, int len) | 从此输入流 len 最多 len 字节的数据读入一个字节数组。 |
close() | 关闭此文件输入流并释放与该流关联的所有系统资源 |
flush() | 刷新流。 |
使用循环改进,输出全部内容
使用字节输入流读取字节数组
改进写法\\
var is = new FileInputStream("d:/soft/Demo/1.txt");
byte[] st = new byte[50];
int len;
while ((len=is.read(st))!=-1){
System.out.println(new String(st,0,len));
}
字节输出流: FileOutputStream
FileOutputStream(String name) | 创建文件输出流以写入具有指定名称的文件。 |
FileOutputStream(File file) | 创建文件输出流以写入由指定的 File 对象表示的文件 |
write(int b) | 将指定的字节写入此文件输出流 |
write(byte[] b) | 将指定字节数组中的 b.length 字节写入此文件输出流。 |
write(byte[] b, int off, int len) | 将从偏移量 off 开始的指定字节数组中的 len 字节写入此文件输出流 |
public static void main(String[] args) throws Exception {
var os =new FileOutputStream("d:/soft/Demo/1.txt");//先清空之前的数据,写新数据进去
//写一个数据出去
os.write('a');
os.write(98);
os.write('是');
byte[] buffer ={'a',12,33,22};
os.write(buffer);
os.write("\r\n".getBytes()); //\r\n 表字符流换行 \r表回车
byte[] buffer2 ="我是中国人".getBytes();
os.write(buffer2);
byte[] buffer3 ={'c',11,22,33};
os.write(buffer3,0,3); //选取指定范围写入
//写数据必须刷新数据
// os.flush();
os.close(); //释放资源
字符流: 与字节流相比,字符流更适合读取文本数据。
字符输入流:FileReader
FileReader(String fileName) | 使用平台 default charset创建一个新的 FileReader ,给定要读取的文件的 名称 。 |
FileReader(File file) | 使用平台 FileReader ,在 File 读取时创建一个新的 FileReader 。 |
read() | 读一个字符。 |
read(char[] cbuf) | 将字符读入数组。 |
read(char[] cbuf, int off, int len) | 将字符读入数组的一部分。 |
public static void main(String[] args) throws IOException {
//实例一个字符输入流,与源文件相连
var file = new FileReader("d:/soft/Demo/2.txt");
//定义一个字符数组做桶
char[] buffer =new char[1000];
int len;
//定义len用来接收读取到的文件,把读到的文件放到桶里
while ((len =file.read(buffer))!=-1){
//实例化字符串对象,把桶子里的接收
String str =new String(buffer,0,len);
System.out.println(str);
}
}
字符输出流: FileWriter
FileWriter(String fileName) | 构造一个 FileWriter 给出文件名,使用平台的 default charset |
FileWriter(File file) | 给 File 写一个 FileWriter ,使用平台的 default charset |
append(char c) | 将指定的字符追加到此writer。 |
append(CharSequence csq, int start, int end) | 将指定字符序列的子序列追加到此writer。 |
write(String str) | 写一个字符串。 |
write(char[] cbuf) | 写一个字符数组。 |
write(String str, int off, int len) | 写一个字符串的一部分。 |
write(char[] cbuf, int off, int len) | 写一个字符数组的一部分 |
package IO;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriter1 {
public static void main(String[] args) throws IOException {
var fw =new FileWriter("d:/soft/Demo/1.txt");
// public void write(int c):写一个字符出去
fw.write(32);
fw.write('男' );
fw.write("鲁迅");
fw.write("\r\n");
fw.flush();
//写一个字符数组出去 public void write(char[] buffer)
char[] buffer ="我是周树人".toCharArray();
fw.write(buffer);
fw.write("\r\n");
//写入字符串的一部分出去 public void write(String c ,int pos,int end)
fw.write("我是鲁迅er",1,5);
fw.write("\r\n");
//写数组的一部分出去。public void write(char[] c ,int pos,int end)
char []chars ="我是讯哥儿".toCharArray();
fw.write(chars,1,4);
// ,flush() 刷新后流可以继续使用
fw.write("\r\n");
fw.flush();
}
}