File和RandomAccessFile
文件类 File
构造函数
File file = new File("文件路径");
路径分类:
绝对路径
相对路径:相对于某个基准目录的路径(SE中是项目目录为参照路径的)
.表示当前目录的根目录
..表示当前目录的上一级目录
常用方法
file.exists():测试文件是否存在
file.getName();获取文件名
file.getlength();获取文件大小
file.isFile():判断当前file对象是否为文件类型
file.isDirectory():判断当前file对象是否为文件夹类型
file.isHidden():判断是否为隐藏文件
file.canRead()判断是否可读
file.canWrite()判断是否可写
file.getPath():获取当前file对象的路径
file.lastModifile();获取最后一次修改file对象的时间
文件的创建和删除
file.createNewFile();按照指定路径创建文件
file.delete();删除file对象所代表的文件
文件夹的创建和删除
file.mkdirs();按照file的路径创建指定的文件夹
file.delete();删除指定的目录。删除前必须是空目录
file.listFiles();以File数组的形式获取此文件夹下的所有直系子项
小知识:使用递归清理空文件夹
private static void digui(File file) {
if (file.isDirectory()) {
for (File file1 : file.listFiles()) {
digui(file1);
}
if (file.delete()) {
System.out.println(file.getPath() + "被删除");
}
}
}
文件过滤器:FileFilter
用法
FileFilter ff = new FileFilter() {
@Override
public boolean accept(File file) {
//输入判定规则}
};
举例
//使用文件过滤器过滤当前目录下所有后缀名为.java的文件
public static void main(String[] args) {
String path = "./src";
File file = new File(path);
fangfa1(file);
}
private static void fangfa1(File file) {
File[] listFiles = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.isDirectory() | pathname.getName().endsWith(".java");
}
});
for (File file2 : listFiles) {
if (file2.isDirectory()) {
fangfa1(file2);
} else {
System.out.println(file2.getPath());
}
}
}
随机文件读写类:RandomAccessFile
需要注意:
因为是基于指针,所以,一定要新建两个同一对象,一个读,一个写
构造函数
RandomAccessFile raf = new RandomAccessFile(file, "rw");
new RandomAccessFile(path, "rw");
r:只读
rw:读写
常用方法
close():关流操作
write(int byte):表示写入一字节 的数据
write(byte[] byte) 写入全部字节数组的数据
writeXXX(xxxx):表示写入什么类型的数据
read()读取亿字节的数据
read(byte[] b):将读到的数据全部存入给定的字节数组中
readInt():表示从该文件中读取一个int数据
getFilePointer():获取当前指针所在的位置
seek(long ):设置当前指针的位置
使用RandomAccessFile实现文件的复制
long start = System.currentTimeMillis();//创建开始时间戳
RandomAccessFile read = new RandomAccessFile("F:\\Java2020\\java2020\\src\\信用卡管理.xlsx", "rw");//创建文件读取流
RandomAccessFile write = new RandomAccessFile("src\\信用卡管copy.xlsx", "rw");//创建文件写入流
byte[] b = new byte[1024*10];//创建缓冲数组
int len = -1;//设定标记位
while((len = read.read(b))!=-1){
write.write(b, 0, len);//循环读取并写入
}
long end = System.currentTimeMillis();
white.close();//关流
read.close();//关流
System.out.printf("文件复制完毕,耗时%d毫秒",(end-start));