IO流
- 程序到文件,文件到程序
- 分为输出流和输入流
- 流分为字节流,字符流
字节流可以操作所有类型文件,字符流只能操作文本文件(可以用windows记事本打开并且能正常读懂的文件)
流的结构图:只有下面接口的实现类才可以创建对象,如FileOutStream(文件字节输出流)
从下图更清晰的知道,再上面接口名字的基础上添加前缀就可以形成新的流(这里还有一些流没有展示,但是命名规则都是按照上面这句话来)
创建一个文件字节输出流:
package test;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test01 {
public static void main(String[] args) throws IOException {
FileOutputStream outputStream=new FileOutputStream("a.txt");
//下面的数字走的是阿斯克码值
outputStream.write(97);
outputStream.close();
}
}
关于创建上面这个流的细节值得念叨一下:
细节1:和上面的创建有点不一样欧
FileOutputStream outputStream=new FileOutputStream(new File("a.txt"));
细节2:注意是父类,不是根目录。在这里可以通俗点看成路径名中的倒数第二位,如
c/b/a.txt
中b
是父类,而c
是根目录位置
细节3:就是会覆盖掉之前的内容
字节输出流的三种方式:
第一种:直接放
第二种:
byte[] bytes={97,98,99};
//走的数组
outputStream.write(bytes);
第三种:
byte[] bytes={96,97,98,99,100};
//参数一:数组,参数二:从哪个下标开始,
//参数三:显示多少个元素
outputStream.write(bytes,3,2);
输出字符串: 将String类型数据装进数组中,进行输出到文件中
换行: 换行操作,将String类型\r\n
装进数组
package test;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test04 {
public static void main(String[] args) throws IOException {
//将转义字符装进数组中
String br="\r\n";
byte[] bytes1=br.getBytes();
//将String类型装进数组中
String arg="daliwang";
byte[] bytes=arg.getBytes();
//打开字节流
FileOutputStream outputStream=new FileOutputStream("d.txt");
outputStream.write(bytes1);
outputStream.write(bytes);
outputStream.close();
}
}
续写: 接着文件中已经有的内容进行续写,就是不删除原来的内容,给创建字节流的时候添加参数
//第二个参数添加true,表示续写
FileOutputStream outputStream=new FileOutputStream("d.txt",true);
outputStream.write(bytes1);
outputStream.write(bytes);
outputStream.close();
文件输入字节流:将数据读取出来,.read()
的返回值是int
类型的对应文件中的阿斯克码值,一次只会读一个字节(对于其他类型的文件也生效,如.mp4
),读一次指针移动一次,数据读完了,想要再读,就会返回-1,想循环读取就加个循环呗:
package test;
import java.io.FileInputStream;
import java.io.IOException;
public class Test05 {
public static void main(String[] args) throws IOException {
FileInputStream inputStream=new FileInputStream("d.txt");
int b;
while((b=inputStream.read())!=-1){
System.out.println(b);
}
}
}
文件拷贝:
将文件读取一下,再将其写出(下面的是.mp3
文件,可知读出时返回的值不是简单的int
类型数字,而是当前文件的每一个字节对应的数字,后面再读入将这些字节转换成回文件本来的类型)
package test;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test06 {
public static void main(String[] args) throws IOException {
FileInputStream inputStream=new FileInputStream("C:\\Users\\李家院刘俊辉\\Desktop\\老歌共享\\多年以后我还能不能活着.mp3");
FileOutputStream outputStream=new FileOutputStream("e.mp3");
int b;
while((b=inputStream.read())!=-1){
outputStream.write(b);
}
outputStream.close();
inputStream.close();
}
}