|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 moc 于 2019-1-6 22:53 编辑
1、简介
目录是管理文件的特殊机制,同类文件保存在同一个目录下不仅可以简化文件管理,而且还可以提高工作效率。
Java 语言在 java.io 包中定义了一个 File 类专门用来管理磁盘文件和目录。
每个 File 类对象表示一个磁盘文件或目录,其对象属性中包含了文件或目录的相关信息。
通过调用 File 类提供的各种方法,能够创建、删除、重名名文件、判断文件的读写权限以及是否存在,设置和查询文件的最近修改时间等。不同操作系统具有不同的文件系统组织方式,通过使用 File 类对象,Java 程序可以用与平台无关的、统一的方式来处理文件和目录。
2、File类
1. 构造方法
File(String pathname) --------------------> 根据一个路径得到File对象
File(String parent, String child) ---------> 根据一个目录和一个子文件/目录得到File对象
File(File parent, String child) ------------> 根据一个父File对象和一个子文件/目录得到File对象
- public static void main(String[] args) {
- // File(String pathname):根据一个路径得到File对象
- // 把e:\\demo\\a.txt封装成一个File对象
- File file = new File("E:\\demo\\a.txt");
- // File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
- File file2 = new File("E:\\demo", "a.txt");
- // File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象
- File file3 = new File("e:\\demo");
- File file4 = new File(file3, "a.txt");
- }
复制代码 2. 创建功能
public boolean createNewFile() --------------> 创建文件 如果存在这样的文件,就不创建了
public boolean mkdir() ------------------------> 创建文件夹 如果存在这样的文件夹,就不创建了
public boolean mkdirs() -----------------------> 创建文件夹,如果父文件夹不存在,会帮你创建出来
- public static void main(String[] args) throws IOException {
- // 需求:我要在e盘目录下创建一个文件夹demo
- File file = new File("e:\\demo");
- System.out.println("mkdir:" + file.mkdir());
- // 需求:我要在e盘目录demo下创建一个文件a.txt
- File file2 = new File("e:\\demo\\a.txt");
- System.out.println("createNewFile:" + file2.createNewFile());
- // 需求:我要在e盘目录test下创建一个文件b.txt
- // Exception in thread "main" java.io.IOException: 系统找不到指定的路径。
- // 注意:要想在某个目录下创建内容,该目录首先必须存在。
- // File file3 = new File("e:\\test\\b.txt");
- // System.out.println("createNewFile:" + file3.createNewFile());
- // 创建多级目录
- File file7 = new File("e:\\aaa\\bbb\\ccc\\ddd");
- System.out.println("mkdirs:" + file7.mkdirs());
- // 这里a.txt是个文件夹
- File file8 = new File("e:\\liuyi\\a.txt");
- System.out.println("mkdirs:" + file8.mkdirs());
- }
复制代码 3. 删除功能
public boolean delete() ----------------> 删除文件或目录,必须是空目录才能删除,删除成功返回真,否则返回假
注意: Java中的删除不走回收站。
- // 删除a.txt这个文件
- File file3 = new File("a.txt");
- System.out.println("delete:" + file3.delete());
- // 删除ccc这个文件夹
- File file4 = new File("aaa\\bbb\\ccc");
- System.out.println("delete:" + file4.delete());
复制代码 4. 重命名功能
public boolean renameTo(File dest) --------------> 如果路径名相同,就是改名; 如果路径名不同,就是改名并剪切。
- File file2 = new File("1.jpg");
- File newFile2 = new File("e:\\2.jpg");
- System.out.println("renameTo:" + file2.renameTo(newFile2));
复制代码 5. 判断功能
public boolean isDirectory() ------------> 判断是否是目录
public boolean isFile() ------------------> 判断是否是文件
public boolean exists() -----------------> 判断是否存在
public boolean canRead() -------------> 判断是否可读
public boolean canWrite() ------------> 判断是否可写
public boolean isHidden() ------------> 判断是否隐藏
- public static void main(String[] args) {
- // 创建文件对象
- File file = new File("123.txt");
- System.out.println("isDirectory:" + file.isDirectory());// false
- System.out.println("isFile:" + file.isFile());// true
- System.out.println("exists:" + file.exists());// true
- System.out.println("canRead:" + file.canRead());// true
- System.out.println("canWrite:" + file.canWrite());// true
- System.out.println("isHidden:" + file.isHidden());// false
- }
复制代码 6. 获取功能
public String getAbsolutePath() ----------------> 获取绝对路径
public String getPath() --------------------------> 获取相对路径
public String getName() -------------------------> 获取名称
public long length() ------------------------------> 获取长度<字节数>
public long lastModified() -----------------------> 获取最后一次的修改时间,毫秒值
public String[] list() ------------------------------> 获取指定目录下的所有文件或者文件夹的名称数组
public File[] listFiles() ----------------------------> 获取指定目录下的所有文件或者文件夹的File数组
- public static void main(String[] args) {
- // 创建文件对象
- File file = new File("demo\\test.txt");
- System.out.println("getAbsolutePath:" + file.getAbsolutePath());
- System.out.println("getPath:" + file.getPath());
- System.out.println("getName:" + file.getName());
- System.out.println("length:" + file.length());
- System.out.println("lastModified:" + file.lastModified());
- // 1416471971125
- Date d = new Date(1416471971125L);
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- String s = sdf.format(d);
- System.out.println(s);
- // 指定一个目录
- File file = new File("e:\");
- // public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
- String[] strArray = file.list();
- for (String s : strArray) {
- System.out.println(s);
- }
- System.out.println("------------");
- // public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
- File[] fileArray = file.listFiles();
- for (File f : fileArray) {
- System.out.println(f.getName());
- }
- }
复制代码 3、接口--文件名称过滤器
包: java.io.FilenameFilter
boolean accept(File dir, String name) ----------> 该接口唯一的方法,测试指定文件是否应该包含在某一文件列表中。
案例:判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称
- public static void main(String[] args) {
- File file = new File("e:\");
- // 获取该目录下所有文件或者文件夹的String数组
- String[] strArray = file.list(new FilenameFilter() {
- @Override
- public boolean accept(File dir, String name) {
- return new File(dir, name).isFile() && name.endsWith(".jpg");
- }
- });
- // 遍历
- for (String s : strArray) {
- System.out.println(s);
- }
- }
复制代码 递归案例:
需求:递归删除带内容的目录
分析:
A:封装目录
B:获取该目录下的所有文件或者文件夹的File数组
C:遍历该File数组,得到每一个File对象
D:判断该File对象是否是文件夹
是:回到B
否:就删除
- public static void main(String[] args) {
- // 封装目录
- File srcFolder = new File("demo");
- // 递归实现
- deleteFolder(srcFolder);
- }
- private static void deleteFolder(File srcFolder) {
- // 获取该目录下的所有文件或者文件夹的File数组
- File[] fileArray = srcFolder.listFiles();
- if (fileArray != null) {
- // 遍历该File数组,得到每一个File对象
- for (File file : fileArray) {
- // 判断该File对象是否是文件夹
- if (file.isDirectory()) {
- deleteFolder(file);
- } else {
- System.out.println(file.getName() + "---" + file.delete());
- }
- }
- System.out.println(srcFolder.getName() + "---" + srcFolder.delete());
- }
- }
复制代码 |
|