一、概述
计算机中的数据是如何保存的呢?它是在硬盘里面保存的,以1和0的方式,硬盘里面每个存储单位中存储的不是0就是1,之后再由好多个这样的单位组合在一起,最后构成了文件,随后再用文件夹来存放这些文件,那我们如何操作这些文件和文件夹呢?File类就是用来实现这些功能的。
二、构造方法
先看File类的构造方法
public File(String pathname) :该构造方法可以把一个路径名字符串封装成一个File对象。
public File(String parent, String child):该构造方法把可以把一个父路径名字符串和子路径名字符串创建新的 File实例。
public File(File parent, String child):该构造方法可以把父抽象路径名和子路径名字符串创建新的 File实例。
需要注意的是,三个构造方法都不会管传入的这个路径是否真实存在,File类是不进行判断的,即你的计算机硬盘下面是否有这个路径,File类都不会管,后面有判断路径是否真是存在的方法。
例子://测试File类构造函数 File file1 = new File("e:\\test"); File file2 = new File("e:\\test", "aaa\\bbb"); File file3 = new File(file1, "aaa\\bbb"); //第一种方法直接传入一个路径字符串,正常创建,没有问题 //第二种和第三种方法创建的对象是一样的,正常创建,也没有问题 //在我的计算机中,只有e:\\test路径是真实的,e盘下面有test这个文件 //但是在test文件下并没有aaa文件夹,aaa文件夹下面也没有bbb文件夹 //由此可见File类的构造方法在构造File对象的时候并不会检查目录的真实性
e盘下面存在一个test文件夹。
三、常用方法
1、获取功能方法
1、public String getAbsolutePath() :获取的当前调用这个方法的File对象的全路径,返回的是路径的字符串;这里返回的路径也不是真实的,如果在你在构造File对象时传入的是绝对路径(带盘符的路径),那该方法就返回你构造对象时传入的路径,如果传入的是相对路径(不带盘符的路径),那该方法就会返回当前项目所在的路径加上你传入的相对路径,看代码:
//getAbsolutePath方法测试 File file4 = new File("e:\\test\\aaa\\bbb"); System.out.println("传入绝对路径的情况:"+file4.getAbsolutePath()); File file5 = new File("test\\aaa\\bbb"); System.out.println("传入相对路径的情况:"+file5.getAbsolutePath());
运行结果:
该方法并不判断路径的真实性,只看是否为绝对路径,是绝对路径就输出构造时传入的路径,不是绝对路径就返回项目的路径加上构造对象时传入的路径。
2、public String getPath():获取到当前File类的对象中封装的内容。 这个方法没什么好说的,传入的路径是什么,返回的路径就是什么。看测试代码://测试getPath方法 System.out.println("------分隔符------"); System.out.println(file4.getPath()); System.out.println(file5.getPath());
运行结果:
3、public String getName():获取的是File类的对象中封装的文件或目录的最后一级名称。该方法就是返回路径最后一级的名称,不管路径指向是文件夹还是文件,看代码演示://测试getName方法 System.out.println("------分隔符------"); System.out.println(file4.getName()); System.out.println(file5.getName());
运行结果:
因为构造file4对象和file5对象的时候,最终指向的都是bbb文件夹,所以方法的返回结果都为bbb。
4、public long length():获取文件大小long size = file.length();返回的是文件的字节数,也就是多少bit。我现在往test文件下面放入一个文件,然后再构造一个对象,之后再调用该方法测试,看测试代码:
//测试length方法 System.out.println("------分隔符------"); File file6 = new File("e:\\test\\01.jpg"); System.out.println("文件01.jpg的大小为:"+file6.length());
运行结果:
准确输出文件占用的字节数。
2、判断功能方法
1、public boolean exists():是否存在 如果File类对象中的文件或者文件夹在硬盘上存在 返回 true ,否则返回false;前面讲的,File类在构造File对象的时候并不会判断路径是否真实存在,该方法的用途就是用来判断路径是否真是存在的,看一个例子:
//测试exists方法 System.out.println("------分隔符------"); System.out.println("目录e:\\test是存在的:"+file1.exists()); System.out.println("目录e:\\test\\aaa\\bbb是存在的:"+file2.exists());
运行结果:
2、public boolean isDirectory():是否是文件夹 如果是文件夹 返回 true 否则返回false;
3、public boolean isFile():是否是文件 如果是文件 返回 true , 否则返回false;
这两个方法就可以知道路径最终指向的是一个文件夹还是文件了。测试代码如下://测试isDirectory方法和isFile方法 System.out.println("------分隔符------"); System.out.println("目录e:\\test\\aaa\\bbb指向的是一个文件夹:"+file2.isDirectory()); System.out.println("目录e:\\test指向的是一个文件夹:"+file1.isDirectory()); System.out.println("目录e:\\test\\01.jpg指向的是一个文件夹:"+file6.isDirectory()); System.out.println("目录e:\\test指向的是一个文件:"+file1.isFile()); System.out.println("目录e:\\test\\01.jpg指向的是一个文件:"+file6.isFile());
运行结果:
观察结果,发现路径如果不是真实存在的,isDirectory方法是会返回false的,只有路径是真实的,并且含有该文件夹,isDirectory方法才会返回true。
3、创建删除功能方法
1、public boolean createNewFile():当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。同时,该方法在路径目录存在时才可以创建文件,如果路径不是真实存在的就会报错;看代码 :
//测试createNewFile File file7 = new File("e:\\test\\test.txt"); File file8 = new File("e:\\test\\aaa\\test.txt"); System.out.println("目录真实存在的情况下创建文件"+file7.createNewFile()); System.out.println("目录不真实存在的情况下创建文件"+file8.createNewFile());
运行结果:
值得注意的是,运行一次代码过后,test.txt文件已经被创建,所以第二次会输出false,之后才报错
2、public boolean delete():删除由此File表示的文件或目录。该方法也是一样,路径要真实存在才可以删除,删除路径最终指向的文件夹及其子目录和文件或文件现在测试删除test.txt文件,代码如下:
//测试delete方法 System.out.println("------分隔符------"); System.out.println("删除test.txt的结果"+file7.delete());
运行结果:
3、public boolean mkdir():创建由此File表示的目录。该方法只能创建一级目录,即路径指向的是一个文件夹,该文件夹不存在,则创建该文件夹测试代码如下:
//测试mkdir方法 //file3:"e:\\test\\aaa" //file4:"e:\\test\\aaa\\bbb" System.out.println("在e:\\test\\aaa目录下创建目录bbb:"+file4.mkdir()); System.out.println("在e:\\test目录下创建目录aaa:"+file3.mkdir());
运行结果:
这里两句代码顺序不能颠倒,颠倒之后,aaa目录已经真实存在了,之后bbb目录也可以正常创建了,目前的情况就是aaa目录不存在的情况下,bbb目录是无法正常创建的。
4、public boolean mkdirs():创建由此File表示的目录,包括任何必需但不存在的父目录。该方法就可以创建整个路径,假设你创建File对象的时候,路径不是真实存在的,该方法就可以把路径变为真实路径,可以创建多级目录。测试代码:
//测试mkdirs方法 //file4:"e:\\test\\aaa\\bbb" //这里创建成功的前提是test文件夹里面把aaa目录删除 System.out.println("------分隔符------"); System.out.println("在e:\\test目录下创建目录aaa\\bbb:"+file4.mkdirs());
运行结果:
4、例举功能方法
1、public String[] list():返回一个String数组,表示该File目录中的所有子文件或目录。String数组里面存的都是文件夹名称和文件名称
看代码:
//测试list方法 System.out.println("------分隔符------"); for (String s : file1.list()) { System.out.println(s); }
运行结果:
成功输出test文件夹下的aaa文件夹和01.jpg文件。
2、public File[] listFiles():返回一个File数组,表示该File目录中的所有的子文件或目录。把File对象的子文件夹或文件都封装成一个File对象,随后存到一个File类型的数组里面,返回该数组,使用该方法再结合递归就可以更加方便的遍历File对象下所有的子目录和子文件夹了。看代码
//测试listFiles方法 System.out.println("------分隔符------"); c(file1); //递归输出所有子文件路径和子文件夹路径 public static void c(File file){ if (file.isDirectory()) { System.out.println(file.getPath()); for (File listFile : file.listFiles()) { c(listFile); } } else { System.out.println(file); } }
运行结果:
成功输出test文件下所有的文件夹路径和文件路径。