Java 文件操作 File 及 RandomAccessFile

一、 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("复制完毕");
    	}
    }
    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值