Java 文件操作 File 及 RandomAccessFile
2017-10-11 14:16
507 查看
一、 File类概述
一个代表文件或目录的类
目录 : 只是将一个字符串标记为一个目录 , 路径所占的内存空间大小为0。
二、 重要方法
创建
createNewFile() : 文件不存在时,创建一个文件 , 要求存放这个文件的目录真实存在 ,不能创建目录。
mkdri() : 创建目录
mkdris() : 创建多级目录
删除
deleted() : 删除目录文件
判断
isDrictory() : 判断是否是一个目录
isFile () : 判断是否是一个文件
canWrite() : 判断文件是否可写
canReade() : 判断文件是否可读
exists() ; 判断文件是否真实存在
canExecute() : 判断文件是否可执行
isHidden () : 判断文件是否隐藏
获取
getName() : 获取文件的名字 。 底层实现: 获取路径中“/"最后一次出现的位置,从这个位置的下一位截取后返回文件名。
listFiles() : 获取目录中所有目录和文件组成的集合
getAbsoluteFile() : 获取这个文件的绝对路径
getParent() : 获取父路径 , 底层实现: 获取路径中“/"最后一次出现的位置,从0到这个位置开始截取。
getPath() : 获取路径参数 。 参数传进去是什么样子,获取到就是什么样子
lastModifie() : 获取最后一次修改时间
list() : 获取当前目录下所以文件和目录组成的数组
设置
setWriteable() : 设置文件权限为可写 。
renameTo() : 重命名
练习:
练习:
练习:
三、RandomAccessFile
一个可以对文件进行读写的类 ---- 需要给指定的对象指定对应的权限
操作文件时实际上是把这个文件看做一个大型的字节数组 , 默认从第0为开始操作。
示例:
练习:
一个代表文件或目录的类
目录 : 只是将一个字符串标记为一个目录 , 路径所占的内存空间大小为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("复制完毕"); } }
相关文章推荐
- java-文件操作RandomAccessFile
- Java IO操作——简单了解RandomAccessFile随机读写文件操作类的使用
- java22.IO操作------RandomAccessFile随机文件读写
- JAVA文件操作——RandomAccessFile 的用法
- Java RandomAccessFile文件操作详解
- Java IO 之 RandomAccessFile 操作文件内容
- Java文件操作---RandomAccessFile随机读写文件操作
- Java文件操作:RandomAccessFile
- JavaIO之RandomAccessFile随机访问文件
- java--io流-打印流,序列流,操作对象,管道流,RandomAccessFile,操作字节数组
- Java 用 ByteBuffer和RandomAccessFile 写大文件
- 文件操作——RandomAccessFile
- Java的随机读写文件-RandomAccessFile 与内存映射
- java RandomAccessFile读取文件追加内容
- JAVA学习笔记(三十五)- 随机读写文件 RandomAccessFile
- 【java编程】IO特殊类之RandomAccessFile实现多线程文件下载
- java中RandomAccessFile 类对文件进行读写
- java中获得文件大小,用RandomAccessFile的lengh方法
- java RandomAccessFile类文件基本操作
- RandomAccessFile操作文件的例子