首先,区别 文件 和 目录 的概念:目录下可以有若干个文件
1.概述
java.io.File类 ,用于描述文件 和 目录的路径信息;
使用该类可以获取文件的属性信息。如,文件名、文件大小,但是不能够修改文件的内容。
2. 常用方法
构造方法: File(String pathname) - 根据参数指定的路径构造File类的对象。
boolean exists() - 判断文件/目录是否存在。
String getName() - 获取文件/目录的名称。 long length() - 获取文件的长度。
String getAbsolutePath() - 获取文件的绝对路径信息。
long lastModified( ) - 获取文件的最后一次修改时间。
- 返回的是距离1970年1月1日0时0分0秒的毫秒数,与Date的有参构造搭配使用
boolean createNewFile( ) - 用于创建新的空文件
boolean mkdir( ) - 用于创建目录。
boolean delete( ) - 用于删除文件/目录。
File[] listFiles( ) - 获取当前目录中的所有内容(文件和子目录)。
boolean isDirectory( ) - 判断是否为目录。 boolean isFile() - 判断是否为文件。
代码1:指定路径下的文件存在的情况
前期准备:在 写一个文本 hello.txt文件,文件路径为E:hello.txt 文本内容为:
package com.monkey1024; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; public class FileTest { public static void main(String[] args) { // 创建对象与参数指定的文件建立关联 File file = new File("E:/hello.txt"); // 形参要的是String类型的 文件路径 // 判断该文件是否存在 if(file.exists()) { // 1.文件存在则打印 相关的属性: System.out.println("1.1.打印文件 名称: "+file.getName()); System.out.println("1.2.打印文件 大小: "+file.length()); System.out.println("1.3.打印文件 绝对路径: "+file.getAbsolutePath()); System.out.println(); // 2.获取文件的最后一次修改时间。 System.out.println("2.1.获取文件的最后一次修改时间(毫秒数): "+file.lastModified()); // 使用获取到的毫秒数来构建日期对象 Date date = new Date(file.lastModified()); System.out.println("2.2.转换为系统时间: "+date); // 设置时间输出格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String str = sdf.format(date); System.out.println("2.3.设置了格式之后的文件最后一次修改时间: "+str); } } }
结果:
1.1.打印文件 名称: hello.txt 1.2.打印文件 大小: 16 1.3.打印文件 绝对路径: E:hello.txt 2.1.获取文件的最后一次修改时间(毫秒数): 1572335506500 2.2.转换为系统时间: Tue Oct 29 15:51:46 CST 2019 2.3.设置了格式之后的文件最后一次修改时间: 2019-10-29 15:51:46
代码2:创建新的空文件
package com.monkey1024; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; public class FileTest { public static void main(String[] args) throws IOException { // 创建对象与参数指定的文件建立关联 File file = new File("E:/HelloWorld.java"); // 形参要的是String类型的 文件路径 // 判断该文件是否存在 if(file.exists()) { // 删除存在的文件 boolean b = file.delete(); System.out.println("文件是否删除成功: "+b); }else { // 若不存在,则创建新的空文件 boolean b = file.createNewFile(); System.out.println("新的空文件是否创建成功: "+b); } } }
结果:
新的空文件是否创建成功: true
代码3:
package com.monkey1024; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; public class FileTest { public static void main(String[] args) throws IOException { // 创建对象与参数指定的 目录建立关联 File file = new File("E:\测试文件夹"); // 获取目录中的所有内容,打印每个内容 File[] fs = file.listFiles(); for (File f : fs) { // 判断 是文件 还是 目录,若是文件 则直接打印 文件名称 if(f.isFile()) { System.out.println("打印文件名称: "+f.getName()); } // 若是 目录,则打印文件名的同时,使用[]把名称括起来 if(f.isDirectory()) { System.out.println("打印目录名称: "+"["+f.getName()+"]"); } } } }
结果:
打印文件名称: 01001.rtf 打印文件名称: 01001.xlsx 打印文件名称: 01002.xlsx 打印文件名称: 01hello.java 打印文件名称: 01test001.txt 打印目录名称: [01第一个] 打印目录名称: [01第三个] 打印目录名称: [01第二个] 打印目录名称: [01第四个]
存在一个问题:
这样的代码只能打印 第一层 的 文件 名称 和 目录名称
思考? 如何打印出 指定目录中的内容,并且将子目录中的内容也要打印出来
要求:
1.若关联的是 普通文件,则直接打印文件名即可
2. 若关联的是目录文件。则打印目录名的同时使用 [ ]括起来
package com.monkey1024; import java.io.File; import java.io.IOException; public class FileTest { public static void dirPrint(File file) { // 1.若关联的是 普通文件,则直接打印文件名即可 if(file.isFile()) { System.out.println("打印文件名: "+file.getName()); } // 2. 若关联的是目录文件。则打印目录名的同时使用 [ ]括起来 if(file.isDirectory()) { System.out.println("打印目录名: "+"["+file.getName()+"]"); // 3.获取该目录中的所有文件,分别打印 File[] files = file.listFiles(); for (File f : files) { dirPrint(f); //方法自己调用自己 } } } public static void main(String[] args) throws IOException { File file = new File("E:\测试文件夹"); // 本类中,静态方法的调用 dirPrint(file); } }
结果:
打印目录名: [测试文件夹] 打印文件名: 01001.rtf 打印文件名: 01001.xlsx 打印文件名: 01002.xlsx 打印文件名: 01hello.java 打印文件名: 01test001.txt 打印目录名: [01第一个] 打印目录名: [01第三个] 打印目录名: [01第二个] 打印文件名: 02BOB.bmp 打印文件名: 02成龙.mp4 打印目录名: [01第四个] 打印目录名: [02孙子文件夹] 打印文件名: 03我是孙孙子文本.txt 打印文件名: 02李连杰.mp4