Java中的File类详解
文章目录
使用IO流可以将存储从内存转换为在磁盘上持久化。IO流,解决的是文件的传输问题。所有的输入输出,都是站在内存的角度去考虑。
需要明确的几个知识点
- File类的一个对象,代表一个文件或一个文件目录(即文件夹)。
- File类的声明在java.io包下。
- File类仅涉及文件的创建、删除、重命名、修改时间、文件大小等功能。并未涉及写入或读取文件的操作。写入或读取的操作由IO流完成。
- 路径中的每级目录之间用一个路径分隔符隔开。
- 路径分隔符和系统有关:
-
windows和DOS系统默认使用"
\
"来表示
-
UNIX和URL使用"
/"来表示
File file1 = new File("d:\\Program Files\\info.txt");//windows和DOS中的分隔符 File file2 = new File("d"+File.separator+"Program Files"+File.separator+"info.txt");//兼容性写法 File file3 = new File("d:/Program Files");//UNIX中的分隔符
路径分隔符问题了解即可,实际上在windos开发中使用
/充当分隔符,也是可以识别出来的。
一、如何实例化一个File对象
Java中提供了四种构造器来实例化一个File对象,下面对前三种构造器进行演示。
- File(String pathname)
- File(String parent, String child)
- File(File parent, String child)
@Test public void test1(){ //File(String pathname)构造器 File file1 = new File("hello.txt");//相对于当前module File file2 = new File("D:\\Program Files\\JAVA\\workspace_idea\\JavaSenior\\com.java.io\\hello2.txt");//绝对路径 System.out.println("file1 = " + file1); System.out.println("file2 = " + file2); //File(String parent, String child) 构造器 File file3 = new File("D:\\Program Files","JAVA"); System.out.println("file3 = " + file3); //File(File parent, String child)构造器 File file4 = new File(file3,"hi.txt"); System.out.println("file4 = " + file4); }
打印结果如下:
二、File类的几个常用方法
如果需要判断文件是否存在,是否可读可写,文件长度是多少,最近的修改日期等。这些问题,通过File文件本身就可以做。
1.获取文件属性
- public String getAbsolutePath(); 获取绝对路径。
- public String getPath(); 获取路径。
- public String getName(); 获取名称。
- public String getParent(); 获取上层文件目录。若无,返回null。
- public long length(); 获取文件长度。不能获取目录的长度。
- public long lastModified(); 获取最后一次修改的时间,毫秒值。
- public String[] list(); 获取指定目录下的所有文件或文件目录的名称数组。
- public File[] listFiles(); 获取指定目录下的所有文件或文件目录的File数组。
下面演示这些功能:
@Test public void test2() { File file = new File("hello.txt"); System.out.println("file的绝对路经:" + file.getAbsolutePath()); System.out.println("file的路经:" + file.getPath()); System.out.println("file的名称:" + file.getName()); System.out.println("file的上层文件目录路径:" + file.getParent()); System.out.println("file的长度:" + file.length()); System.out.println("file最后一次修改的时间:" + new Date(file.lastModified())); System.out.println(); //下面的两个方法适用于文件目录 File file1 = new File("D:\\Program Files\\JAVA"); String[] list = file1.list(); System.out.println("遍历 JAVA 目录下的文件名:"); for (String s : list) { System.out.println(s); } System.out.println(); File[] files = file1.listFiles(); System.out.println("遍历 JAVA 目录下的文件的绝对路径:"); for(File f:files){ System.out.println(f); } }
打印结果如下:
之所以file的上层目录路径为null是因为,使用的是相对路径。
2.重命名文件
- public boolean renameTo(File dest); 把文件重命名为指定的文件路径名。
- 以file1.renameTo(file2)为例,要想保证返回true,需要file1在硬盘中是存在的,而file2不能在硬盘中存在。
- 该方法不仅可以修改文件名,也可以修改文件路径。
@Test public void test3() { File file1 = new File("d:\\test1.txt");//硬盘上存在test1.txt File file2 = new File("d:\\AAA\\test2.txt");//硬盘上不存在test2.txt boolean b = file1.renameTo(file2); System.out.println(b); }
上面的测试执行后,成功将test1.txt文件转移到d://AAA路径下并将名称修改为test2.txt。
3.判断文件功能
- public boolean isDirectory();判断文件是否是文件目录。
- public boolean isFile();判断是否是文件。
- public boolean exists();判断是否存在。
- public boolean canRead();判断是否可读。
- public boolean canWrite();判断是否可写。
- public boolean isHidden();判断是否隐藏。
@Test public void test4(){ File file = new File("hello.txt");//该文件在硬盘中存在 System.out.println("是否是文件目录:"+file.isDirectory()); System.out.println("是否是文件:"+file.isFile()); System.out.println("是否存在:"+file.exists()); System.out.println("是否可读:"+file.canRead()); System.out.println("是否可写:"+file.canWrite()); System.out.println("是否隐藏:"+file.isHidden()); }
执行结果如下:
4.创建文件\文件夹
使用构造器实例化一个File,只是在内存中创建了这个对象。下面介绍的File类的创建方法才是真正在硬盘上创建一个文件或文件目录。
- public boolean createNewFile(); 创建文件,若文件存在则不创建,返回false。
- public boolean mkdir(); 创建文件目录。如果此文件目录存在,或此文件目录的上层目录不存在,就不创建了。
- public boolean mkdirs(); 创建文件目录,如果上层文件目录不存在,一并创建。
注意:如果在创建文件或创建文件目录时,没有写盘符路径, 默认在项目路径下。
创建文件:
@Test public void test5() throws IOException { File file = new File("hi.doc");//在磁盘创建一个文件 if (!file.exists()) { file.createNewFile(); System.out.println("创建成功"); } else { file.delete(); System.out.println("删除成功"); } }
创建文件时,使用后缀表名需要创建的文件类型,若文件在磁盘中存在则不创建。
创建文件夹:
@Test public void test6() { File file = new File("d:\\aa");//在磁盘创建一个文件夹 boolean mkdir = file.mkdir();//若上层目录不存在,返回false if (mkdir) { System.out.println("创建成功"); } else { System.out.println("创建失败"); } File file1 = new File("d:\\bb\\cc\\dd"); boolean mkdirs = file1.mkdirs();//若上层目录不存在,一并创建 if (mkdirs) { System.out.println("创建成功"); } else { System.out.println("创建失败"); } }
创建文件夹有mkdir和mkdirs两个方法,两者的区别在于上层目录不存在时的做法,mkdir直接返回false,mkdirs则一并创建上层目录。
5.删除文件
- public boolean delete(); 删除文件或文件夹。
删除方法在上面的创建文件中已经有演示,这里不做赘述。删除时,该文件目录内不能包含文件或文件目录。另外需注意:Java中的删除不走回收站。
File类的介绍到此结束,后续的IO流中File类的对象常会作为参数传递到流的构造器中,指明读入或写出的"终点"。
三、File类小练习
学习了上面的File类实例化对象,和使用常用方法在磁盘上操作文件后。通过下面三个小练习,熟悉对File类的操作。
File练习1
利用File构造器,实例化一个文件目录file(磁盘上已经创建好d:\aa\hello.txt)。
1)创建一个与file同级目录下的文件和文件夹。
2)编写方法,实现删除一个文件的操作。
练习1代码:
@Test public void exercise1() throws IOException { File file = new File("d:\\aa\\hello.txt"); File file1 = new File(file.getParent(),"bb"); file1.mkdir();//创建文件夹 File file2 = new File(file.getParent(),"cc.doc"); file2.createNewFile();//创建文件 file.delete();//删除 }
程序运行前:
程序运行后:
File练习2
判断指定目录下,是否有后缀名为.jpg的文件,如果有,就输出该文件名称。
方法一:使用String[] list();
@Test public void exercise2_1() { File file = new File("D:\\桌面整理\\公共课\\图片素材");//这是我的电脑上一个装有图片的文件夹 String[] list = file.list(); for (String s : list) { if (s.endsWith(".jpg")) { System.out.println(s); } } }
方法二:使用File[] listFiles();
@Test public void exercise2_2() { File file = new File("D:\\桌面整理\\公共课\\图片素材");//这是我的电脑上一个装有图片的文件夹 File[] listFiles = file.listFiles(); for (File f : listFiles) { if (f.getName().endsWith(".jpg")) { System.out.println(f.getName()); } } }
方法三:使用FileFilter过滤器
@Test public void exercise2_3() { File file = new File("D:\\桌面整理\\公共课\\图片素材");//这是我的电脑上一个装有图片的文件夹 File[] listFiles = file.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return name.endsWith(".jpg"); } }); for (File f : listFiles) { System.out.println(f.getName()); } }
三者输出结果都一样:
File练习3
遍历指定目录所有文件名称,包括子文件目录中的文件。(递归)
1)计算指定目录占用空间的大小。(递归)
2)删除指定文件目录及其下的所有文件。(递归)
代码实现如下:
package File; import java.io.File; /** * Class description: * 续File练习题 * * @guoqianliang */ public class exe_File2 { /** * 遍历指定目录所有文件名称,包括子文件目录中的文件。 * 1)并计算指定目录占用空间的大小。 * 2)删除指定文件目录及其下的所有文件。 */ public static void main(String[] args) { File dir = new File("D:\\xxx"); printdir(dir);//递归遍历目录 System.out.println(getDirectorySize(dir));//递归计算目录占用空间大小 deleteDirectory(dir);//删除所有文件 } private static void printdir(File dir) {//递归 //如果是文件夹就输出名称并递归,如果是文件就仅获取名称. File[] listFiles = dir.listFiles(); for (File f : listFiles) { if (f.isDirectory()) { System.out.println(f.getName()); printdir(f); } else { System.out.println(f.getName()); } } } private static long getDirectorySize(File file) {//递归 //如果是文件就累加,如果是文件夹就递归 long size = 0; if (file.isFile()) { size += file.length(); } else { File[] listFiles = file.listFiles(); for (File f : listFiles) { size += getDirectorySize(f); } } return size; } private static void deleteDirectory(File file) { //如果是文件直接删掉,如果是文件夹先删除它的下一级再删除它 if (file.isDirectory()) { File[] listFiles = file.listFiles(); for (File f : listFiles) { deleteDirectory(f); } } file.delete(); } }
- 点赞
- 收藏
- 分享
- 文章举报
- 【56】java本地文件File类详解
- File类详解--Java基础083
- Java中File类详解
- 【56】java本地文件File类详解
- 【java】File类的详解使用方法
- java中File类详解
- 【56】java本地文件File类详解
- Java File类的详解
- 01JavaIO详解_File类
- Java File类方法使用详解
- JAVA IO(二)File类详解
- JAVA基础初探(十二)Map接口及其常用实现类(HashMap)、File类详解(概述、创建、删除、重命名、文件属性读取/设置、遍历文件夹)
- Java I/O系统详解(一)——File类
- 关于java基础--File类与FileFilter过滤器的详解与测试
- Java----File类详解
- 【Java菜鸟 04】Java中的File类详解
- Java File类用法详解
- java中File类详解
- Java输入/输出——File类详解
- ⚔疯狂输出⚔ Java中 File类 的详解