-
文件定义
1.狭义文件:存储在硬盘上的数据,以文件为单位,进行组织,文件夹叫做目录,是一种特殊的文件
2.广义文件:操作系统负责管理软硬件的资源(操作系统Linux都统一抽象成文件来进行管理,一切皆是文件)
3.硬盘特点:
(硬盘存储空间大,内存存储空间小;硬盘访问速度比较慢,而内存访问速度比较快;硬盘成本比较低,内存成本比较高;硬盘上数据断电不丢失,内存数据断电会丢失)
-
文件路径
1.绝对路径(\目录\......)
2.相对路径 (首先要有一个基准路径,以基准路径为起点,在继续进行;在相对路径中..表示返回上级目录)
-
文件内容读写
字节流(以字节为单位,适用于二进制文件)
Inputstream-----FileInputStream Outputstream---------FileOutputStream
字符流(适用于文本文件)
Reader-------FileReder Writer-----FileWriter
字节流读取文件(读取文件完成要关闭文件)
public static void main(String[] args) throws IOException{
try(InputStream inputStream=new FileInputStream("hello.txt")) //相当于打开文件{
while (true){
int b=inputStream.read();
if (b==-1){
//文件读取完毕
break;
}
System.out.println("%c",b);
}
}
}
字节流写文件
OutputStream outputStream=new FileOutputStream("bbb.txt");
字符流读文件
-
使用Scanner进行读(针对文本文件可以使用scanner读取,scanner是inputStream基础上转化成字符流)
public static void main(String[] args) throws IOException{
//需要先在项目目录下准备好一个 hello.txt 的文件,里面填充 "你好中国" 的内容
try (InputStream inputStream=new FileInputStream("d:test.txt")){
Scanner scanner=new Scanner(inputStream,"UTF-8");
while (scanner.hasNext()){
String s=scanner.next();
System.out.println(s);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
-
printWriter来写数据
public static void main(String[] args) throws IOException {
try (OutputStream os = new FileOutputStream("output.txt")) {
try (OutputStreamWriter osWriter = new OutputStreamWriter(os, "UTF8")) {
try (PrintWriter writer = new PrintWriter(osWriter)) {
writer.println("我是第一行");
writer.print("我的第二行\r\n");
writer.printf("%d: 我的第三行\r\n", 1 + 1);
writer.flush(); //进行数据刷新操作
}
}
}
}
1.文件操作的时候一定要close:因为每一个进程都对应PCB,PCB里面有一个字段,文件描述符表(相当于是一个顺序表/数组)进程每次打开一个文件,都会在表里创建一个项,这一项就表示一个文件,关闭一个文件就会把表里对应项给释放掉,不关闭就意味着这个表项在这里占着位置,如果持续打开文件并且都不关就会导致表项被耗尽,后续元素打开失败
2.一个进程能够打开几个文件:在系统中配置的
3.文件泄露:JVM是会自动释放,但是对应流对象如果被GC销毁,会自动关闭对应文件,如果代码有问题,则仍然会保持这种流对象引用,不会触发GC,文件就会一直打开
-
文件读写应用
文件复制:
1.把第一个文件打开,把里面内容按字节读取出来,写到第二个文件里面即可
2.先输入你要复制的文件,把源文件复制到哪里去
3.打开源文件,按照字节读取内容,写到目标文件
//文件复制
public static void main(String[] args) throws IOException {
//打开源文件和目标文件
InputStream inputStream=new FileInputStream("d:test1.txt");
OutputStream outputStream=new FileOutputStream("d:test2.txt");
//读取文件
while (true){
int b=inputStream.read();
if (b==-1){
break;
}
outputStream.write(b);
}
inputStream.close();
outputStream.close();
}