文章目录
一、File类
1、概述
File类的文件代表操作系统的文件或文件夹
2、创建对象
1)方法
方法名 | 解释 |
---|---|
public File(String pathname) |
根据文件路径创建文件对象 |
public File(String parent, String child) |
根据父路径名字符串和子路径名字符串创建文件对象 |
public File(File parent, String child) |
根据父路径对应文件对象和子路径名字符串创建文件对象 |
- 注意
File对象可以定位文件和文件夹
File封装的对象仅仅是一个路径名,这个路径可以是存在的,也可以是不存在的
2)创建文件 File file = new File(路径)
- 绝对路径
File file = new File("D:\\aa.txt");
- 相对路径
File file = new File("data/ip.txt");
3)File的文件类型和获取信息
方法名 | 解释 |
---|---|
public boolean isDirectory() |
判断是否为文件夹 |
public boolean isFile() |
判断是否为文件 |
public boolean exists() |
判断是否存在 |
public long length() |
获取文件的大小(字节数量) |
public String getAbsolutePath() |
获取文件的绝对路径 |
public String getPath() |
获取定义文件时使用的路径 |
public String getName() |
获取文件的名称,带后缀 |
public long lastModified() |
获取文件的最后修改时间(时间毫秒值) |
- 实战(实现方法)
import java.io.File;
public class ClassStructure {
public static void main(String[] args) {
File file = new File("data/ip.txt");
//是否为文件夹
System.out.println(file.isDirectory());
//是否为文件
System.out.println(file.isFile());
//是否存在
System.out.println(file.exists());
//文件的大小(字节数量)
System.out.println(file.length());
//文件的绝对路径
System.out.println(file.getAbsolutePath());
//定义文件时使用的路径
System.out.println(file.getPath());
//文件的名称,带后缀
System.out.println(file.getName());
//文件的最后修改时间(时间毫秒值)
System.out.println(file.lastModified());
}
}
4)File文件创建和删除
- 创建文件
方法名 | 解释 |
---|---|
public boolean createNewFile() |
创建新的空文件 |
public boolean mkdir() |
只能创建一级文件夹 |
public boolean mkdirs() |
可以创建多级文件夹 |
import java.io.File;
import java.io.IOException;
public class ClassStructure {
public static void main(String[] args) throws IOException {
File file = new File("data1");
//只能创建一层文件夹
boolean mkdir = file.mkdir();
System.out.println(mkdir);
File file1 = new File("data1\\data");
//创建多层文件夹
System.out.println(file1.mkdirs());
//创建新文件
File file2 = new File("data1\\data\\test.txt");
boolean newFile = file2.createNewFile();
System.out.println(newFile);
}
}
- 删除文件
方法名 | 解释 |
---|---|
public boolean delete() |
删除由此抽象路径名表示的文件或空文件夹; delete方法默认只能删除文件和空文件夹,delete方法直接删除不走回收站 |
import java.io.File;
import java.io.IOException;
public class ClassStructure {
public static void main(String[] args) throws IOException {
File file = new File("data1\\data\\test.txt");
//删除文件
boolean delete = file.delete();
System.out.println(delete);
}
}
- 不能删除非空文件夹
import java.io.File;
import java.io.IOException;
public class ClassStructure {
public static void main(String[] args) throws IOException {
File file = new File("data1");
//删除文件
boolean delete = file.delete();
System.out.println(delete);
}
}
5)File文件遍历
方法名 | 解释 |
---|---|
publicString[]list() |
获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回 |
publicFile[]listFiles() |
获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回 |
- listFiles()注意事项:
返回为null的情况,可以有效避免遍历返回数组时候出现运行时异常
File对象不存在时或者代表文件时,返回null
File对象代表一个空文件夹时,返回一个长度为0的数组
File对象是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
File对象是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件
File对象权限访问该文件夹时,返回null
import java.io.File;
import java.io.IOException;
public class ClassStructure {
public static void main(String[] args) throws IOException {
File dir = new File("data\\nest");
File[] files = dir.listFiles();
for (File file : files) {
System.out.println(file);
}
}
}
二、IO流
1、IO流体系图
2、概念
I标识Input,数据从硬盘到内存读入的过程,叫输入,负责读
O标识Output,数据从内存到写出到硬盘的过程,叫输出,负责写
3、FileInputStream文件字节输入流
把磁盘中的数据已字节的形式读入到内存中
构造器 | 解释 |
---|---|
public FileInputStream(File file) |
创建字节输入流管道与源文件对象接通 |
public FileInputStream(String pathname) |
创建字节输入流管道与源文件路径接通 |
方法名 | 解释 |
---|---|
public int read() |
每次读取一个字节,没有字节返回-1 |
public int read(byte[] buffer) |
每次读取一个字节数组,没有字节返回-1 |
public int read(byte[] buffer,int off,int len) |
从下标off的位置开始读取最多len个字节数据储存于buffer数组缓冲区 |
import java.io.FileInputStream;
import java.io.IOException;
public class ClassStructure {
public static void main(String[] args) throws IOException {
int read = 0;
//创建一个读入数据的相对路径的流
FileInputStream fileInputStream = new FileInputStream("data/access.log");
/* int i
//判断文件是否为空,否则一直读取打印
while ((read = fileInputStream.read()) != -1){
System.out.print((char)read);
}
System.out.println();
*/
/* byte[] buffer
//创建一个8字节数组
byte[] by = new byte[8];
//读取流
read = fileInputStream.read(by);
System.out.println(read);
//转换为字符串
String str = new String(by);
System.out.println(str);
*/
/*
byte[] buffer , int pos , int len 指定输出流
*/
//创建一个8字节数组
byte[] by = new byte[8];
//判断文件是否为空,否则一直读取打印
while((read = fileInputStream.read(by)) != -1){
//转换为字符串
String str = new String(by,0,read);
System.out.println(str);
}
//读取完流必须关闭
fileInputStream.close();
}
}
4、FileOutputStream文件字节输出流
内存中的数据以字节的形式写出到磁盘中
构造器 | 解释 |
---|---|
public FileOutputStream(File file) |
创建字节输出流管道与源文件对象接通 |
public FileOutputStream(File file,boolean append) |
创建字节输出流管道与源文件对象接通,可追加数据 |
public FileOutputStream(String filepath) |
创建字节输出流管道与源文件路径接通 |
public FileOutputStream(String filepath,boolean append) |
创建字节输出流管道与源文件路径接通,可追加数据 |
方法名 | 解释 |
---|---|
public void write(int i) |
一个字符数据写入输入流 |
public void write(byte[] buffer) |
字符类型数组中的数据写入输出流 |
public void write(byte[] buffer , int pos , int len) |
字符类型数组中的指定部分数据写入输出流 |
flush() |
刷新流,可以继续写数据 |
close() |
关闭流,释放资源,但是在关闭之前会先刷新流; 一旦关闭,就不能再写数据 |
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class ClassStructure {
public static void main(String[] args) throws IOException {
int read = 0;
//创建一个读入数据的相对路径的流
FileInputStream fileInputStream = new FileInputStream("data/access.log");
FileOutputStream fileOutputStream = new FileOutputStream("data/access1.log");
/* int i
//判断文件是否为空,否则一直读取打印
while ((read = fileInputStream.read()) != -1){
//把文件内容直接写入到access1.log中
fileOutputStream.write(read);
}
System.out.println();
/*
byte[] buffer , int pos , int len 指定输出流
*/
//创建一个8字节数组
byte[] by = new byte[8];
//判断文件是否为空,否则一直读取打印
while((read = fileInputStream.read(by)) != -1){
fileOutputStream.write(by,0,read);
}
System.out.println("复制OK");
//将输出流的缓冲流数据全部写出到达目的地
fileOutputStream.flush();
//读取完流必须关闭
fileInputStream.close();
//写入完流必须关闭
fileOutputStream.close();
}
}
5、try-catch-finally资源释放
finally:放在try-catch后面的,无论是正常执行还是异常执行代码,最后一定要执行,特殊情况除外
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class ClassStructure {
public static void main(String[] args) throws FileNotFoundException {
int read = 0;
FileInputStream fileInputStream = null;
FileOutputStream fileOutputStream = null;
//创建一个读入数据的相对路径的流
fileInputStream = new FileInputStream("data/access.log");
fileOutputStream = new FileOutputStream("data/access1.log");
try {
//判断文件是否为空,否则一直读取打印
while ((read = fileInputStream.read()) != -1) {
//把文件内容直接写入到access1.log中
fileOutputStream.write(read);
}
System.out.println();
System.out.println("复制OK");
} catch (Exception e) {
e.printStackTrace();
} finally {
//将输出流的缓冲流数据全部写出到达目的地
try {
fileOutputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
try {
//读取完流必须关闭
if (fileInputStream != null) {
fileInputStream.close();
}
//写入完流必须关闭
if (fileOutputStream != null) {
fileOutputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}