Java基础之File
文章目录
一、File的声明
声明的File不需要是存在的,我们声明的路径可以是存在的,也可以是不存在的。因为我们只是声明,并不一定会用。
方法名 | 说明 |
---|---|
File(String pathname) | 通过给定的字符串路径指明一个File文件(或者文件夹) |
File(String parent,String child) | 通过两个字符串拼接形成最终字符串路径,指明一个File文件(或者文件夹) |
File(File parent,String child) | 实际上也是通过两个字符串拼接形成最终字符串路径,指明一个File文件(或者文件夹) |
public static void main(String[] args) {//通过给定的字符串路径指明一个File文件(或者文件夹)File file=new File("D:\\\\Code\\\\ideaCode\\\\FileTestDemo\\\\aa.txt");//通过两个字符串拼接形成最终字符串路径,指明一个File文件(或者文件夹)File file1=new File("D:\\\\Code\\\\ideaCode\\\\FileTestDemo","aa.txt");String path1="D:\\\\Code\\\\ideaCode\\\\FileTestDemo";String path2="aa.txt";File file2=new File(path1,path2);String path3="D:\\\\Code\\\\ideaCode\\\\FileTestDemo";File file3=new File(path3,"aa.txt");String path4="aa.txt";File file4=new File("aa.txt",path4);//实际上也是通过两个字符串拼接形成最终字符串路径,指明一个File文件(或者文件夹)File file5=new File("D:\\\\Code\\\\ideaCode\\\\FileTestDemo");String path5="aa.txt";File file6=new File(file3,path5);}
二、File的创建
方法名 | 说明 |
---|---|
boolean createNewFile() | 创建一个文件 |
boolean mkdir() | 创建一个文件夹 |
boolean mkdirs | 创建一个多级文件夹 |
2.1 创建一个文件
我们在这里创建一个aa.txt文本文件,初始无aa.txt文件存在
public static void main(String[] args) throws IOException {//声明一个文件File file=new File("D:\\\\Code\\\\ideaCode\\\\FileTestDemo\\\\aa.txt");//创建文件(若文件已存在,则返回false,否则返回true)boolean newFile = file.createNewFile();System.out.println(newFile);}
运行结果:
2.2 创建一个文件夹
我们在这里创建一个名为bb的单级文件夹,初始无bb单级文件夹存在
public static void main(String[] args) throws IOException {//声明一个单级文件夹File file1=new File("D:\\\\Code\\\\ideaCode\\\\FileTestDemo\\\\bb");//创建单级文件夹(若文件夹已存在,则返回false,否则返回true)boolean mkdir = file1.mkdir();System.out.println(mkdir);}
运行结果:
2.3 创建一个多级文件夹
我们在这里创建一个名为cc的多级文件夹,初始无cc多级文件夹存在
public static void main(String[] args) throws IOException {//声明一个多级文件夹File file2=new File("D:\\\\Code\\\\ideaCode\\\\FileTestDemo\\\\cc\\\\aa\\\\bb\\\\dd\\\\ee");//创建多级文件夹boolean mkdirs = file2.mkdirs();System.out.println(mkdirs);}
运行结果:
三、File的删除
调用delete()方法仅能删除文件和空文件夹,若一个文件夹中含有文件或者文件夹,则需要将文件夹中的文件和文件夹清空,使之成为空文件夹才能将之删除。
方法名 | 说明 |
---|---|
boolean delete() | 删除一个文件或者空文件夹 |
删除我们刚刚创建的bb空文件夹
public static void main(String[] args) throws IOException {//声明bb文件夹File file=new File("D:\\\\Code\\\\ideaCode\\\\FileTestDemo\\\\bb");//调用delete()方法删除bb空文件夹boolean delete = file.delete();System.out.println(delete);}
运行结果:
删除我们刚刚创建的aa.txt文件
public static void main(String[] args) throws IOException {//声明aa.txt文件File file=new File("D:\\\\Code\\\\ideaCode\\\\FileTestDemo\\\\aa.txt");//调用delete()方法删除aa.txt文件boolean delete = file.delete();System.out.println(delete);}
运行结果:
删除我们刚刚创建的cc多级文件夹(直接调用delete()方法无法删除cc多级文件夹,因为cc多级文件夹并不是空文件夹)
public static void main(String[] args) throws IOException {//声明cc多级文件夹File file=new File("D:\\\\Code\\\\ideaCode\\\\FileTestDemo\\\\cc");//调用delete()方法无法直接删除cc多级文件夹boolean delete = file.delete();System.out.println(delete);}
运行结果:
四、File的获取与判断
方法名 | 说明 |
---|---|
File[] listFiles() | 获取一个文件夹孩子层所有文件和文件夹,并存入数组 |
boolean isFile() | 判断一个File对象是否为文件 |
boolean isDirectory() | 判断一个File对象是否为文件夹 |
boolean exists() | 判断一个File对象是否存在 |
String getName() | 获取当前File对象的全名(包括后缀名) |
4.1 获取一个文件夹孩子层所有文件和文件夹,并存入数组
我们来遍历一个aa非空文件夹,aa非空文件夹孩子层所有文件及文件夹如下图所示:
public static void main(String[] args) throws IOException {//声明aa非空文件夹File file=new File("D:\\\\Code\\\\ideaCode\\\\FileTestDemo\\\\aa");//调用listFiles()方法获取aa文件夹孩子层所有文件和文件夹File[] files = file.listFiles();//使用forEach()语句遍历File数组for (File file1 : files) {System.out.println(file1);}}
运行结果:
4.2 判断一个File对象是否为文件
我们先来判断aa.txt它是不是一个文件
public static void main(String[] args) throws IOException {//声明aa.txt文件File file=new File("D:\\\\Code\\\\ideaCode\\\\FileTestDemo\\\\aa.txt");//调用isFile()方法判断对象是否为文件boolean file1 = file.isFile();System.out.println(file1);}
运行结果:
我们再来判断bb.txt它是不是一个文件(无意外,它不是一个文件)
public static void main(String[] args) throws IOException {//声明bb.txt文件File file=new File("D:\\\\Code\\\\ideaCode\\\\FileTestDemo\\\\bb.txt");//调用isFile()方法判断对象是否为文件boolean file1 = file.isFile();System.out.println(file1);}
运行结果:
4.3 判断一个File对象是否为文件夹
我们来判断bb.txt它是不是一个文件夹。
public static void main(String[] args) throws IOException {//声明bb.txt文件File file=new File("D:\\\\Code\\\\ideaCode\\\\FileTestDemo\\\\bb.txt");//调用isDirectory()方法判断对象是否为文件夹boolean directory = file.isDirectory();System.out.println(directory);}
运行结果:
4.4 判断一个File对象是否存在
exists()方法可以判断一个File对象是否存在(不论是文件还是文件夹均可判断),我们声明一个虚假的cc.txt文件,来判断它是否存在。结果为不存在。
public static void main(String[] args) throws IOException {//声明cc.txt文件File file=new File("D:\\\\Code\\\\ideaCode\\\\FileTestDemo\\\\cc.txt");//调用exists()方法判断File对象是否存在boolean exists = file.exists();System.out.println(exists);}
运行结果:
4.5 获取当前File对象的全名(包括后缀名)
public static void main(String[] args) throws IOException {//声明cc.txt文件File file=new File("D:\\\\Code\\\\ideaCode\\\\FileTestDemo\\\\cc.txt");//调用getName()方法获取当前File对象的全名(包括后缀名)String name = file.getName();System.out.println(name);}
运行结果:
五、File案列练习(根据文件类型分类)
获取一个非空文件夹孩子层所有文件及文件夹,并按照后缀名来对它们进行划分,并统计各个类型文件数量(因此我们无需查看文件夹,只需查看孩子层文件即可)
public static void main(String[] args) throws IOException {//声明aa非空文件夹File file=new File("D:\\\\Code\\\\ideaCode\\\\FileTestDemo\\\\aa");//创建Key值类型为String,Value值类型为Integer的Map集合,其中Key表示文件类型,Value表示此文件类型的数量Map<String,Integer> map=new HashMap<>();//调用listFiles()方法读取aa非空文件夹孩子层所有文件及文件夹File[] files = file.listFiles();//遍历File数组for (File file1 : files) {//若此对象为文件,对它文件类型进行划分if(file1.isFile()){//获取此文件全名(包括后缀名)String nameAll=file1.getName();//将文件名按"."进行分割,存入String数组中String[] nameArr=nameAll.split("\\\\.");//获取文件后缀名(文件的后缀名一定为最末尾元素)String nameLast=nameArr[nameArr.length-1];//如果集合中存在此文件类型if(map.containsKey(nameLast)){//通过文件类型获取此文件类型的数量int count=map.get(nameLast);//数量加1count++;//更新文件类型的数量map.put(nameLast,count);}else{//若集合中不存在此文件类型,则将此文件类型存入集合中,数量为1map.put(nameLast,1);}}}//普通方法输出集合System.out.println(map);}
运行结果: