一,def
I:表示input,是数据从硬盘进内存的过程,称为读
O:表示output,是数据从内存到硬盘的过程,成为写
二,分类
按流向分:输入流,输出流
按数据类型分:字节流(操作所有文件,包括音频视频图片等),字符流(只能操作纯文本文件, 包 括java文件,txt文件)
纯文本文件:用windows记事本打开能读的懂的文件就是~
三,字节流写数据,类名:FileOutputStream(文件位置)
步骤:1),创建字节流输出对象 :new FileOutPutStream()
2),写数据,方法:write(写入的数据)
3),释放资源(这一步最重要,最容易忘),方法:close()
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo1 {
public static void main(String[] args) throws IOException {
FileOutputStream fot=new FileOutputStream("D:\\ok\\o.txt");
//写入一个数据
fot.write(98);
fot.write(97);
fot.write(96);
fot.write(95);
//写入一个换行符
fot.write("\r\n".getBytes());
//一次写入一个字节数组的部分
byte[]bs={98,88,55};
fot.write(bs);
//一次写入一个字节数组的一部分
fot.write(bs,1,2);
//写字符串,把字符串转换为字节数组
fot.write("hellow".getBytes());
//关流
fot.close();
}
}
注意:
1),如果文件不存在,就会直接创建
2),如果文件存在,就会清空里面的内容
3),传递一个整数时候,实际上传递的是这个整数在码表上对应的字符
4),如果不释放资源,文件就无法删除
几个问题:
write()方法:
可以一次写入一个字节,也可以一次写一个字节数组,也可以一次写一个字节数组的一部分
换行符:
windows:"\r\n".getBytes()
linux:"\n"
max:"\r"
写入数据不清空原文件夹的数据:
FileOutputStream(文件位置,true):第二个就是续写开关,如果不写默认为Forse
四,字节输入流,类:FileInputStream(这里可以传File对象也可以传字符串对象)
1, 步骤: 1),创建字节流输出对象 :new FileInPutStream(),文件不存在就会报错
2),写数据,方法:read(),一次读一个字节
3),释放资源(这一步最重要,最容易忘),方法:close()
2,注意:1,一次读取一个字节,返回值就是本次读到的那个字节数据,也就是字节再码表中 对应的那个数字,如果我们要看到的是字符数据,那么一定要强转为char
3,文件中有多个字节,用数组做中转站,代码如下:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo4 {
//把一个文件内容复制到另一个文件中去
public static void main(String[] args) throws IOException {
//创建一个输出流
FileOutputStream fot=new FileOutputStream("D:\\ok\\o1.txt");
//创建一个输入流
FileInputStream fis=new FileInputStream("D:\\ok\\o.txt");
//输入和输出同时进行
//定义一个数组
byte[] arr=new byte[1024];
int len ;
while ((len=fis.read(arr))!=-1){
fot.write(arr,0,len);
}
//释放字符
fot.close();
fis.close();
}
}