1 File类的静态成员遍历

字段 摘要
static String pathSeparator 与系统有关的路径分隔符,为了方便,它被表示为一个字符串。
static char pathSeparatorChar 与系统有关的路径分隔符。
static String separator 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
static char separatorChar 与系统有关的默认名称分隔符。

路径分割符:Windows:分号 Linux:冒号
文件名称分割符:Windows:\反斜杠 Linux:/正斜杠
注意:操作路径不能写死,应该使用File.separator来连接

2 绝对路径和相对路径

绝对路径:以盘符开始的完整路径
相对路径:相对于当前项目的根目录
C:\files\file.txt —> file.txt
路径不区分大小写
反斜杠是转义符 两个反斜杠表示一个反斜杠

3 File类的构造方法

public static void constructMethod() {File file = new File("C://test.txt");System.out.println(file);//重写了Object类的toString方法 打印文件路径 路径可以不真实存在File file2 = new File("C:","a.txt");//父子路径单独书写 变化灵活System.out.println(file2);File file3 = new File("c:\\");//第一个参数的类型是File类而不是StringFile file4 = new File(file3,"a.txt");System.out.println(file4);}

4 常用方法

获取

  1. getAbsolutePath
  2. getPath
  3. getName
  4. length:文件长度
public static void method() {File f1 = new File("a.txt");//相对路径String absolutePath = f1.getAbsolutePath();System.out.println(absolutePath);//打印绝对路径String path = f1.getPath();System.out.println(path);//打印路径参数 a.txtSystem.out.println(f1.toString());//toString源码调用的就是getPath()File f2 = new File("E:\\download\\learn\\a.txt");File f3 = new File("a.txt");File f4 = new File("E:\\download\\learn");//getName打印结尾部分 文件名/文件夹名System.out.println(f2.getName());//a.txtSystem.out.println(f3.getName());//a.txt 文件名System.out.println(f4.getName());//learn 文件夹名//length返回的是文件长度 //获取构造方法指定的文件的大小 单位为byte//文件不存在返回0 文件夹没有大小概念 也是0System.out.println(f2.length());}

判断

  1. exists():路径是否存在
  2. isDirectory():file对象是否是文件夹,路径不存在返回false
  3. isFile():file对象是否是文件,路径不存在返回false
public static void method() {File f1 = new File("a.txt");//相对路径System.out.println(f1.exists());File f2 = new File("E:\\download\\learn");System.out.print(f1.isFile());System.out.println(" " + f1.isDirectory());//true falseSystem.out.print(f2.isDirectory());System.out.println(" " + f2.isFile());//true false}

创建和删除

  1. createNewFile():当该名称的文件不存在的时候,创建一个空文件,返回true。若文件存在,不创建返回false。此方法只能创建文件,不能创建文件夹。路径必须存在,否则会抛出异常。【调用该方法会抛出IO异常 要么throws 要么try-catch】
  2. delete():删除file表示的文件或目录,谨慎使用,直接在硬盘删除文件/文件夹,不走回收站。注意:如果文件夹中有东西,则不会删除成功,返回false。如果路径不存在,返回false。
public static void method() throws IOException {File f1 = new File("a.txt");//相对路径 存在boolean b1 = f1.createNewFile();System.out.println(b1);// falseFile f2 = new File("b.txt");//不存在 创建返回trueboolean b2 = f2.createNewFile();System.out.println(b2);// trueFile f3 = new File("F://none");//路径不存在System.out.println(f3.createNewFile());//报错:系统找不到指定的路径}
  1. mkdir():创建file表示的目录
  2. mkdirs():创建file表示的目录 包括必须但不存在的父级目录
public static void method() throws IOException {File f1 = new File("E:\\download\\newlearn");//新文件夹boolean mkdir1 = f1.mkdir();System.out.println(mkdir1);//trueFile f2 = new File("E:\\download\\learn");//已存在文件夹boolean mkdir2 = f2.mkdir();System.out.println(mkdir2);//falseFile f3 = new File("E:\\download\\newlearn\\learn\\learn");System.out.println(f3.mkdir());// false不能创建多级目录System.out.println(f3.mkdirs());// true 可以创建多级目录File f4 = new File("F:\\download");//路径不存在System.out.println(f4.mkdir());// false}

遍历目录

  1. String[] list()
  2. File[] listFile()

注意
如果路径不存在,会报空指针异常。
如果路径不是目录,也会报空指针异常。
可以遍历到隐藏文件夹。

public static void method() throws IOException {File f1 = new File("E:\\download\\learn\\");String[] list = f1.list();for(String i: list){//相对路径System.out.println(i);}File[] list = f1.listFiles();for(File i: list){//绝对路径System.out.println(i);}}

5 案例:递归打印多级目录

public static void main(String[] args) {File dir = new File("E:\\download\\1");getAllFiles(dir);}public static void getAllFiles(File dir){File[] files = dir.listFiles();for(File file: files){System.out.println(file);}}

打印结果:显示不全 没有子文件夹 2里面还有3和4

E:\download\1\2
E:\download\1\2.doc
E:\download\1\2.txt

解决方法:如果遇到文件夹,则递归调用getAllFiles()

public static void main(String[] args) {File dir = new File("E:\\download\\1");getAllFiles(dir);}public static void getAllFiles(File dir){File[] files = dir.listFiles();for(File file: files){if(file.isDirectory()){getAllFiles(file);}System.out.println(file);}}

E:\download\1\2\3\4.txt
E:\download\1\2\3
E:\download\1\2\3.pptx
E:\download\1\2\3.txt
E:\download\1\2
E:\download\1\2.docx
E:\download\1\2.txt

6 案例:文件搜索

只要txt文件,其他的不需要。

public class FileTest {public static void main(String[] args) {File dir = new File("E:\\download\\1");getAllFiles(dir);}public static void getAllFiles(File dir){File[] files = dir.listFiles();for(File file: files){if(file.isDirectory()){getAllFiles(file);}else {if(file.toString().endsWith(".txt")){System.out.println(file);}}}}
}

7 文件过滤器

File类中有两个listFiles的重载方法,参数类型是过滤器

java.io.fileFilter接口 用于抽象路径名的过滤器,抽象方法accept(File pathname)

java.io.fileNameFilter接口 用于过滤文件名称,抽象方法accept(File dir, String name)
文件对象用这个构造方法 —> File(dir, name)

需要自己写实现类,重写抽象方法,自定义过滤规则

listFiles对目录进行遍历,获取文件和文件夹并封装为File对象
然后调用accept方法 讲File对象传递到accept的参数
如果返回值是false就会保存到数组中

public static void getAllFiles(File dir){File[] files = dir.listFiles(new FileFilter() {@Overridepublic boolean accept(File pathname) {if (pathname.isDirectory()){return true;}return pathname.toString().endsWith("txt");}});for(File file: files){if(file.isDirectory()){getAllFiles(file);}else {System.out.println(file);}}}

输出:

E:\download\1\2\3\4.txt
E:\download\1\2\3.txt
E:\download\1\2.txt

Lambda简化

File[] files=dir.listFiles((pathname)-> pathname.isDirectory()||pathname.getName().endsWith(".txt"));

【Java】文件操作相关推荐

  1. Java文件操作大全(绝对的经典,值得收藏!)

    Java文件操作 //1.创建文件夹 //import java.io.*; File myFolderPath = new File(str1); try { if (!myFolderPath.e ...

  2. 【Java文件操作(八)】将控制台输出重定向到txt文件

    我的博客--Java文件操作系列 [Java文件操作(一)]递归打印文件目录 [Java文件操作(二)]删除文件夹,但保留其内部文件 [Java文件操作(三)]递归复制文件夹内所有文件 [Java文件 ...

  3. 【Java文件操作(七)】序列化:将自定义类写入文件

    我的博客--Java文件操作系列 [Java文件操作(一)]递归打印文件目录 [Java文件操作(二)]删除文件夹,但保留其内部文件 [Java文件操作(三)]递归复制文件夹内所有文件 [Java文件 ...

  4. 【Java文件操作(六)】借助内存复制图片:ByteArrayOutputStream\ByteArrayInputStream\FileOutputStream\FileInputStream辨析

    我的博客--Java文件操作系列 [Java文件操作(一)]递归打印文件目录 [Java文件操作(二)]删除文件夹,但保留其内部文件 [Java文件操作(三)]递归复制文件夹内所有文件 [Java文件 ...

  5. 【Java文件操作(五)】从txt文件中读取字符串、乱码原因

    我的博客--Java文件操作系列 [Java文件操作(一)]递归打印文件目录 [Java文件操作(二)]删除文件夹,但保留其内部文件 [Java文件操作(三)]递归复制文件夹内所有文件 [Java文件 ...

  6. 【Java文件操作(三)】递归复制文件夹内所有文件

    我的博客--Java文件操作系列 [Java文件操作(一)]递归打印文件目录 [Java文件操作(二)]删除文件夹,但保留其内部文件 [Java文件操作(三)]递归复制文件夹内所有文件 [Java文件 ...

  7. 【Java文件操作(一)】递归打印文件目录

    我的博客--Java文件操作系列 [Java文件操作(一)]递归打印文件目录 [Java文件操作(二)]删除文件夹,但保留其内部文件 [Java文件操作(三)]递归复制文件夹内所有文件 [Java 文 ...

  8. java文件操作和_JAVA文件操作类和文件夹的操作

    JAVA文件操作类和文件夹的操作 package com.gamvan.tools; import java.io.BufferedReader; import java.io.File; impor ...

  9. 读取Java文件到byte数组的三种方式及Java文件操作大全(包括文件加密,String加密)

    读取Java文件到byte数组的三种方式 package zs;import java.io.BufferedInputStream; import java.io.ByteArrayOutputSt ...

  10. Java文件操作源码大全

    Java文件操作源码大全 1.创建文件夹 5 2.创建文件 5 3.删除文件 5 4.删除文件夹 6 5.删除一个文件下夹所有的文件夹 7 6.清空文件夹 8 7.读取文件 8 8.写入文件 9 9. ...

最新文章

  1. linux awk 多分隔符
  2. virtual background for conference
  3. OpenGL——使用Bresenham算法绘制圆
  4. Python基础——PyCharm版本——第五章、循环(for、while、break、continue)
  5. C#读书笔记:线程,任务和同步
  6. ABP入门系列(18)—— 使用领域服务
  7. 问题:Excel在“xxx.xlsx”中发现不可读取的内容。是否恢复此工作薄的内容?【原创】...
  8. Axure函数与属性速查
  9. python判断GET和POST有没有某个参数
  10. 你们要的国内会议来了!部分截稿时间临近,入群享快速投稿服务
  11. 对事件流的小故事理解
  12. 苹果账号调查事件始末,Apple审核流程或有变
  13. jqgrid 列排序
  14. 微信小程序的分享链接
  15. PB 切换中英文输入法
  16. 教你如何使用Python破解WIFI密码
  17. springboot+dubbo+mybatis(注册中心使用的是zookeeper)学习
  18. Android开发快速入门及导出apk
  19. 压铸过程的冲头“临界速度” | 智铸超云技术分享
  20. idea error jdk isnt specified for module

热门文章

  1. 大佬为何可以把单片机描述得如此形象生动?
  2. harmonyos手机开发者beta,HarmonyOS 手机应用开发者 Beta 版到来,对开发者意味着什么...
  3. 小小突击队为什么服务器正在维护中,4399小小突击队3月20日5:30更新维护公告!...
  4. f12获取网页文本_8招教你快速搞定网页内容禁止复制粘贴,想怎么复制就怎么复制...
  5. c++ string 删除字符_字符串操作的全面总结
  6. MySQL基本操作指令
  7. socket.io跨域踩坑
  8. 2021年算法工作总结
  9. 奇异值分解(Singular Value Decomposition,SVD)
  10. 剑指Offer - 面试题7. 重建二叉树(递归)