写点什么

Java 中 IO 字符流、File 类

  • 2022 年 4 月 19 日
  • 本文字数:2993 字

    阅读完需:约 10 分钟

}


二、File 类


========

1、File 类的概述和作用

  • File 类是文件和目录路径名的抽象表示形式

  • Java 中把文件或者目录(文件夹)都封装成 File 对象

  • 在硬盘上操作文件,直接使用 File 类

2、File 类静态的成员变量

  • pathSeparator:与系统有关的路径分隔符,为了方便,它被表示为一个字符串

  • separator:与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串


public static void main(String[] args) {


//File 类静态成员变量


//与系统有关的路径分隔符


String separator = File.pathSeparator;


System.out.println(separator);// 是一个分号,目录的分割(window 中环境变量配置各个路径用分号分割,表示一个完整的路径结束) Linux 中是冒号 :


//与系统有关的默认名称分隔符


separator = File.separator;


System.out.println(separator);// 向右 \ 目录名称分割 Linux /


}

3、File 类的构造方法

  • File(String pathname):将路径封装 File 类型对象

  • File(String parent,String child):根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 对象

  • File(File parent,String child):将 parent 封装成 file 对象


public static void main(String[] args){


//将路径封装 File 类型对象


String pathName = "F:\TestPath";


File f1 = new File(pathName);//将 Test22 文件封装成 File 对象。注意;有可以封装不存在文件或者文件夹,变成对象。


System.out.println(f1);


//根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 对象


File f2 = new File("F:\TestPath","a.txt");


System.out.println(f2);


//将 parent 封装成 file 对象。


File dir = new File("F:\TestPath");


File f3 = new File(dir,"a.txt");


System.out.println(f3);


}

4、File 类创建、删除文件(文件、文件夹)

  • public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了

  • public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了

  • public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来

  • public boolean delete():删除文件或者文件夹


public static void main(String[] args) throws IOException {


//创建文件


File F1 = new File("F:\TestPath\a.txt");


boolean B1 = F1.createNewFile();


System.out.println(B1);


//创建文件夹


File F2 = new File("F:\TestPath\a");


boolean B2 = F2.mkdir();


System.out.println(B2);


//删除文件


File F3 = new File("F:\TestPath\a.txt");


boolean B3 = F3.delete();


System.out.println(B3);


}

5、File 类获取功能

  • String getName():返回路径中表示的文件或者文件夹名(获取路径中的最后部分的名字)

  • long length():?返回路径中表示的文件的字节数

  • String getAbsolutePath():获取绝对路径,返回 String 对象

  • File ? getAbsoluteFile() :获取绝对路径,返回 File 对象

  • String getParent():获取父路径,返回 String 对象

  • File getParentFile():获取父路径,返回 File 对象


public static void main(String[] args) throws IOException {


File F1 = new File("F:\TestPath\a.txt");


F1.createNewFile();


String S1 = F1.getName(); //返回路径中表示的文件或者文件夹名,即获取路径中最后部分的名字


long L1 = F1.length(); //返回路径中表示的文件的字节数


File absolute = F1.getAbsoluteFile(); //获取绝对路径,返回 File 对象


File parent = F1.getParentFile(); //获取父路径,返回 File 对象


System.out.println(S1);


System.out.println(L1);


System.out.println(absolute);


System.out.println(parent);


}

6、File 类判断功能

  • boolean exists():判断 File 构造方法中封装路径是否存在

  • boolean isDirectory():判断 File 构造方法中封装的路径是不是文件夹

  • boolean isFile():判断 File 构造方法中封装的路径是不是文件

7、File 类 list 获取功能

  • String[] list():获取到 File 构造方法中封装的路径中的文件和文件夹名 (遍历一个目录)

  • File[] listFiles():获取到,File 构造方法中封装的路径中的文件和文件夹名 (遍历一个目录)

  • static File[] listRoots(): 列出可用的文件系统根?


public static void main(String[] args)


{


File dir = new File("F:\TestPath");


//获取的是目录下的当前的文件以及文件夹的名称。


String[] names = dir.list();


for(String name : names){


System.out.println(name);


}


System.out.println("========================");


//获取目录下当前文件以及文件对象,只要拿到了文件对象,那么就可以获取其中想要的信息


File[] files = dir.listFiles();


for(File file : files){


System.out.println(file);


}


}


注意:


  • 指定的目录必须存在

  • 指定的必须是目录,否则容易返回数组 null,出现 NullPointerException

8、文件过滤器

使用文件过滤器可以删选出某些关键字的文件或文件夹,即过滤一个目录下的指定扩展名的文件,或者包含某些关键字的文件夹


常用方法:


  • public String[] list(FilenameFilter filter):

  • public File[] listFiles(FileFilter filter):


自定义过滤器类


//自定义过滤器实现 FileFilter 接口,重写抽象方法


public class myFilter implements FileFilter {


@Override


public boolean accept(File pathname) {


return pathname.getName().endsWith(".txt");


}


}


在 main 中调用


public static void main(String[] args)


{


File F = new File("F:\TestPath");


File[] filearr = F.listFiles(new myFilter());


for(File f : filearr)


{


System.out.println(f);


}


}


分析:


  • listFiles()遍历目录的同时,获取到了文件名全路径,调用过滤器的方法 accept,将获取到的路径传递给 accept 方法的参数 pathname

  • accept 方法接收了参数 pathname,参数是 listFiles 传递来的

  • 在 accept 方法中,进行判断,如果这个路径是 txt 文件,返回 true,走着返回 false

  • 一旦方法返回了 true,listFiles 将路径保存到 File 数组中

9、递归全目录,寻找指定文件

自定义过滤器


//自定义过滤器实 Java 开源项目【ali1024.coding.net/public/P7/Java/git】 现 FileFilter 接口,重写抽象方法


public 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源 class myFilter implements FileFilter {


public boolean accept(File pathname) {


if(pathname.isDirectory()) {


return true;


}


return pathname.getName().endsWith(".txt");


}


}


在 main 中递归调用


public static void main(String[] args)


{


File F = new File("F:\TestPath");


gitAllDir(F); //递归遍历所有目录


gitAllTxt(F); //递归遍历所有 txt 文件


}


public static void gitAllDir(File F)


{


//System.out.println(F);


//调用方法 listFiles()对目录,dir 进行遍历


File[] allFile = F.listFiles();


for(File f : allFile)


{


//System.out.println(f);


//判断变量 f 表示的路径是不是文件夹


if(f.isDirectory())


{


//是一个目录,就要去调用 getAllDir 递归遍历这个目录


gitAllDir(f);


}


else


{


System.out.println(f);

总结

对于面试还是要好好准备的,尤其是有些问题还是很容易挖坑的,例如你为什么离开现在的公司(你当然不应该抱怨现在的公司有哪些不好的地方,更多的应该表明自己想要寻找更好的发展机会,自己的一些现实因素,比如对于我而言是现在应聘的公司离自己的家更近,又或者是自己工作到达了迷茫期,想跳出迷茫期等等)



Java 面试精选题、架构实战文档


整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~


你的支持,我的动力;祝各位前程似锦,offer 不断!

用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
Java中IO字符流、File类_Java_爱好编程进阶_InfoQ写作平台