一、 File类概述
- 一个代表文件或目录的类
- 目录 : 只是将一个字符串标记为一个目录 , 路径所占的内存空间大小为0。
二、 重要方法
- 创建
- createNewFile() : 文件不存在时,创建一个文件 , 要求存放这个文件的目录真实存在 ,不能创建目录。
- mkdri() : 创建目录
- mkdris() : 创建多级目录
- 删除
- deleted() : 删除目录文件
- 判断
- isDrictory() : 判断是否是一个目录
- isFile () : 判断是否是一个文件
- canWrite() : 判断文件是否可写
- canReade() : 判断文件是否可读
- exists() ; 判断文件是否真实存在
- canExecute() : 判断文件是否可执行
- isHidden () : 判断文件是否隐藏
- 获取
- getName() : 获取文件的名字 。 底层实现: 获取路径中“/"最后一次出现的位置,从这个位置的下一位截取后返回文件名。
- listFiles() : 获取目录中所有目录和文件组成的集合
- getAbsoluteFile() : 获取这个文件的绝对路径
- getParent() : 获取父路径 , 底层实现: 获取路径中“/"最后一次出现的位置,从0到这个位置开始截取。
- getPath() : 获取路径参数 。 参数传进去是什么样子,获取到就是什么样子
- lastModifie() : 获取最后一次修改时间
- list() : 获取当前目录下所以文件和目录组成的数组
- 设置
- setWriteable() : 设置文件权限为可写 。
- renameTo() : 重命名
- 练习:
/* *文件练习 * 用递归的方式删除一个目录及目录下所有的文件 * */ public class FileTest_01 { public static void main(String[] args) { //C:\\Users\\user\\Desktop\\杂七杂八-定时清理 - 副本 File f = new File("C:\\Users\\user\\Desktop\\杂七杂八-定时清理 - 副本"); delFile(f); System.out.println("执行完成"); } public static void delFile(File f){ //判断参数是否为空 if(f == null){ throw new NullPointerException("该路径为错误路径"); } //判断是否是一个目录 if(f.isDirectory()){ File[] listFiles = f.listFiles(); for(File ff : listFiles){ delFile(ff); } } //删除当前目录 f.delete(); } }
- 练习:
/* * 记录某一种格式文件的个数 * * */ public class FileTest_02 { private static int count = 0; public static void main(String[] args) { // C:\\Users\\user\\Desktop\\杂七杂八-定时清理 - 副本 File f = new File("C:\\Users\\user\\Desktop\\笔记 - 副本"); getCount(f); System.out.println("该目录下txt文件的个数为: "+count); } private static void getCount(File f) { //判断路径是否为空 if(f == null){ throw new NullPointerException("该路径为错误路径"); } //判断是否是一个 目录 if(f.isDirectory()){ File[] listFiles = f.listFiles(); for(File ff : listFiles){ getCount(ff); } }else{ //如果是文件 ,判断文件格式 ,并计数 String name = f.getName(); if(name.endsWith(".txt")){ count++; } } } }
- 练习:
/* * 提取一个目录下所有的某一格式的文件 * */ public class FileTest_03 { private static File toFile = new File("C:\\Users\\user\\Desktop\\哈哈"); // private static File toFile1 = new File("C:\\Users\\user\\Desktop\\哈哈2"); public static void main(String[] args) { File f = new File("C:\\Users\\user\\Desktop\\笔记 - 副本 (3)"); extr(f); System.out.println("执行完毕!"); } private static void extr(File f) { //判断文件是否为空 if(f == null){ throw new NullPointerException("该路径为错误路径"); } //判断是否是一个目录 if(f.isDirectory()){ File[] listFiles = f.listFiles(); for(File ff : listFiles){ extr(ff); } }else{ //如果不是目录 则判断文件类型并挪动 if(f.getName().endsWith(".txt")){ //获取文件真正的名字 String name = f.getName(); int index = name.lastIndexOf("."); String realName = name.substring(0, index); //过滤目标目录 判断是否有重名文件 FilenameFilter filter = new FilenameFilter() { @Override public boolean accept(File dir, String name) { return name.matches(realName+"\\d*\\.txt"); } }; File[] list = toFile.listFiles(filter); System.out.println(list.length); //开始挪动 f.renameTo(new File(toFile , realName+(list.length>0?list.length:"")+".txt")); } } } }
三、RandomAccessFile
- 一个可以对文件进行读写的类 ---- 需要给指定的对象指定对应的权限
- 操作文件时实际上是把这个文件看做一个大型的字节数组 , 默认从第0为开始操作。
- 示例:
public class RandomAccessFileDemo1 { public static void main(String[] args) throws Exception { // r --- 读取 // w --- 写入 // d --- 同步更新 // 如果文件不存在,则创建该文件 // 如果文件已存在,直接操作该文件 RandomAccessFile raf = new RandomAccessFile("E:\\a.txt", "rw"); // 跳过指定的字节个数 raf.seek(7); // 写出数据 raf.write("abc".getBytes()); // 将指针归零 raf.seek(0); // 表示读取一个字节---如果读取到文件的末尾会返回一个-1 // int i = raf.read(); // System.out.println(i); // int i = -1; // // while ((i = raf.read()) != -1) { // System.out.println(i); // } // 构建了缓冲区 byte[] bs = new byte[8]; int len = -1; // read(byte[] bs)---返回值表示读取到的字节个数 while ((len = raf.read(bs)) != -1) { System.out.println(new String(bs, 0, len)); } // 当一个RandomAccessFile对象在操作这个文件的时候,不允许别的对象操作 raf.close(); } }
- 练习:
/* * 复制文件 * */ public class RandomAccessFileTest_01 { public static void main(String[] args) throws IOException { //源文件 File of = new File("C:\\Users\\user\\Desktop\\哈哈\\1、Django之url函数.txt"); //目标文件 File nf = new File("C:\\Users\\user\\Desktop\\暂存\\1.txt"); //创建RandomAccessFile对象并指向源文件 RandomAccessFile rafo = new RandomAccessFile(of, "rw"); //创建RandomAccessFile对象并指向新文件 RandomAccessFile rafn = new RandomAccessFile(nf, "rw"); //构建缓冲区 byte[] bs = new byte[1024*1024*15]; int len = -1; //读取文件 while(( len = rafo.read(bs)) != -1){ //将读取到的字节流写入到目标文件中 rafn.write(bs, 0, len); } //关闭流资源 rafn.close(); rafo.close(); System.out.println("复制完毕"); } }