Java 中 IO 字符流、File 类
}
二、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 不断!
评论