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() {@Overridepublic 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"));}}} }
- 一个可以对文件进行读写的类 ---- 需要给指定的对象指定对应的权限
- 操作文件时实际上是把这个文件看做一个大型的字节数组 , 默认从第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 文件操作 File 及 RandomAccessFile相关推荐
- Java 文件操作-File
1.File文件操作 java.io.File用于表示文件(目录),也就是说程序员可以通过File类在程序中操作硬盘上的文件和目录.File类只用于表示文件(目录)的信息(名称.大小等),不能对文件的 ...
- 读取Java文件到byte数组的三种方式及Java文件操作大全(包括文件加密,String加密)
读取Java文件到byte数组的三种方式 package zs;import java.io.BufferedInputStream; import java.io.ByteArrayOutputSt ...
- Java文件操作源码大全
Java文件操作源码大全 1.创建文件夹 5 2.创建文件 5 3.删除文件 5 4.删除文件夹 6 5.删除一个文件下夹所有的文件夹 7 6.清空文件夹 8 7.读取文件 8 8.写入文件 9 9. ...
- Java文件操作大全(绝对的经典,值得收藏!)
Java文件操作 //1.创建文件夹 //import java.io.*; File myFolderPath = new File(str1); try { if (!myFolderPath.e ...
- 【Java文件操作(七)】序列化:将自定义类写入文件
我的博客--Java文件操作系列 [Java文件操作(一)]递归打印文件目录 [Java文件操作(二)]删除文件夹,但保留其内部文件 [Java文件操作(三)]递归复制文件夹内所有文件 [Java文件 ...
- 【Java文件操作(六)】借助内存复制图片:ByteArrayOutputStream\ByteArrayInputStream\FileOutputStream\FileInputStream辨析
我的博客--Java文件操作系列 [Java文件操作(一)]递归打印文件目录 [Java文件操作(二)]删除文件夹,但保留其内部文件 [Java文件操作(三)]递归复制文件夹内所有文件 [Java文件 ...
- 【Java文件操作(三)】递归复制文件夹内所有文件
我的博客--Java文件操作系列 [Java文件操作(一)]递归打印文件目录 [Java文件操作(二)]删除文件夹,但保留其内部文件 [Java文件操作(三)]递归复制文件夹内所有文件 [Java文件 ...
- 【Java文件操作(一)】递归打印文件目录
我的博客--Java文件操作系列 [Java文件操作(一)]递归打印文件目录 [Java文件操作(二)]删除文件夹,但保留其内部文件 [Java文件操作(三)]递归复制文件夹内所有文件 [Java 文 ...
- java文件操作和_JAVA文件操作类和文件夹的操作
JAVA文件操作类和文件夹的操作 package com.gamvan.tools; import java.io.BufferedReader; import java.io.File; impor ...
最新文章
- 自底向上构建知识图谱全过程
- DisplayPageBoundaries 打开word后自动将页面间空白隐藏 (auto+定时器)
- 14.并发与异步 - 2.任务Task -《果壳中的c#》
- POJ-2777-CountColor(线段树,位运算)
- LinuxGPIO操作和MTK平台GPIO
- c# 事件和委托的区别,使用事件的好处
- SpringSecurity动态加载用户角色权限实现登录及鉴权
- ssrs 生成pdf_在SSRS报告中生成热图的可用选项
- jq使用教程04_高校版教程
- Iar新建工程配置使用教程
- 高数_证明_级数收敛的莱布尼茨判别法
- Linux入门系列课程一
- google aviator:轻量级Java公式引擎
- mac 安装typescript
- 常见的27个电源符号
- 武汉光谷国际人工智能产业论坛之学习
- 瑞幸咖啡新获2.5亿美元融资背后
- 什么是Linux发行版 以及各发行版的区别
- 荣耀6x升级Android8省电,HONOR 荣耀 畅玩 6X 手机升级EMUI8.0,怎一个“爽”字了得?...
- 【调剂】安徽理工大学矿业工程学院接收调剂学硕研究生
热门文章
- Oracle 的一些语句
- 疯狂python讲义pdf_火了!她说:“请给我推荐一本Python书!”
- 实验7.3 字符串 7-7 输出大写英文字母
- java 多线程不安全_多线程并发为什么不安全
- Java黑皮书课后题第9章:**9.12(几何:交点)假设两条线段相交。第一条线段的两个端点是(x1, y1)和(x2, y2),第二条线段的两个端点是(x3, y3)和(x4, y4)
- Confluence 实现公司wiki【转】
- Redis入门(二)安装和基本操作
- 初步学习大数据——设置虚拟机固定ip地址
- SQL Server 中系统视图sysobjects中type字段的说明
- [BZOJ 2200][Usaco2011 Jan]道路和航线 spfa+SLF优化