IO流
File流
File是java.io包下的类,File类的对象,用于代表当前操作系统的文件(可以是文件、或文件夹)。
作用:
-
获取文件的元数据(文件大小,文件类型,文件创建时间等)
-
判断文件的类型
-
创建文件/文件夹
-
删除文件/文件夹
注意:File类只能对文件本身进行操作,不能读写文件里面存储的数据。
创建File类的对象
注意
-
File文件既可以代表文件也可以代表文件夹。
-
File封装的对象仅仅是一个路径,这个路径可以是存在的,也可以是不存在的。
绝对路径,相对路径
绝对路径:从盘符开始
相对路径:不带盘符,默认直接到当前工程路径下的目录寻找文件
File提供的判断文件类型,获取文件信息功能
代码演示:
//创建3个File对象【绝对路径(文件夹/绝对路径(文件:存在/相对路径(文件:不存在】 File fOne = new File("G:\\Hello"; File fTwo = new File("G:\\Hello\\World.txt"; File fThree = new File("chapter-09-io\\b.txt"; //boolean exists:判断调用者File对象表示的内容是否存在 System.out.println("fTwo是否存在:" + fTwo.exists(; //T System.out.println("fThree是否存在:" + fThree.exists(; //F //boolean isFile/isDirectory:判断调用者File对象表示的内容是否是文件/文件夹 【将结果作为if的判断条件】 System.out.println("fOne是否是文件:" + fOne.isFile(; //F System.out.println("fTwo是否是文件:" + fTwo.isFile(; //T System.out.println("fThree是否是文件:" + fThree.isFile(; //F System.out.println("fOne是否是文件夹:" + fOne.isDirectory(; //T System.out.println("fTwo是否是文件夹:" + fTwo.isDirectory(; //F System.out.println("fThree是否是文件夹:" + fThree.isDirectory(; //F //String getName:获取调用者表示的文件/文件夹的名称【包含后缀的】 System.out.println("fOne的文件名称是:" + fOne.getName(; System.out.println("fTwo的文件名称是:" + fTwo.getName(; //long length:获取调用者表示的文件的大小【字节数】 文件夹不允许通过此方法获取内部文件大小 System.out.println("fTwo的大小[字节数]:" + fTwo.length(; //long lastModified:获取调用者表示的文件最后的修改时间 long lastModifiedTime = fTwo.lastModified(; Date lastModifiedDate = new Date(lastModifiedTime; System.out.println("fTwo最后的修改时间:" + lastModifiedDate; //String getPath:获取调用者表示的文件/文件夹创建时的参数路径【创建时传绝对获取绝对 创建时传相对获取相对】 System.out.println("fTwo的创建时路径是:" + fTwo.getPath(; System.out.println("fThree的创建时路径是:" + fThree.getPath(; //String getAbsolutePath:获取获取调用者表示的文件/文件夹的绝对路径 System.out.println("fTwo的绝对路径是:" + fTwo.getAbsolutePath(; System.out.println("fThree的绝对路径是:" + fThree.getAbsolutePath(; }
File类创建文件的功能
public class FileDemo3 { public static void main(String[] args throws IOException { //创建File对象表示当前模块下的单级不存在文件夹 File fOne = new File("chapter-09-io\\a"; //mkdirs:将调用者表示的路径创建为文件夹 【记住这一个方法就足够了】 fOne.mkdirs(; //创建File对象表示当前模块下的多级不存在文件夹 File fTwo = new File("chapter-09-io\\a\\b\\c\\d"; fTwo.mkdirs(; //创建File对象表示当前模块下的不存在文件【路径存在】 File fThree = new File("chapter-09-io\\美女.jpg"; //createNewFile:将调用者表示的路径创建为文件 fThree.createNewFile(; //创建File对象表示当前模块下的不存在文件【路径不存在】如果创建文件,文件的上一级不存在,则会抛出IOException! File fFour = new File("chapter-09-io\\z\\z1\\z2\\z3\\z4\\美女.jpg"; //处理方案:无论路径中是否存在,最终保证都可以创建出来 getParentFile:获取表示父路径的File对象 File parentFile = fFour.getParentFile(; parentFile.mkdirs(; fFour.createNewFile(; } }
File类删除文件的功能
注意:delete方法默认只能删除文件和空文件夹,删除后的文件不会进入回收站
public class FileDemo4 { public static void main(String[] args throws IOException { //创建File对象表示当前模块下的文件夹 File fOne = new File("chapter-09-io\\a"; //T File fTwo = new File("chapter-09-io\\美女.jpg"; //T File fThree = new File("chapter-09-io\\target"; //T //boolean delete:删除调用者File对象表示的文件/文件夹【文件夹必须是空的】 fOne.delete(; //a不是空文件夹所以无法删除 fTwo.delete(; fThree.delete(; } }
File类提供的遍历文件夹的功能
public class FileDemo5 { public static void main(String[] args { File fOne = new File("G:\\a.txt"; //File listFiles:将调用者File对象表示的文件夹下的所有一级内容【直系内容】,每一个内容都封装为一个File对象,放到File数组中返回。 //如果调用者文件夹中有直系内容,则数组长度不为0,如果没有直系内容,则数组长度为0,【如果调用者表示的是一个文件,则方法方法不会报错!但是返回的数组是NULL值】 File[] fileArray = fOne.listFiles(; Arrays.stream(fileArray.forEach(file -> { System.out.println(file.getAbsolutePath(; System.out.println(file.getName(; }; } }
使用listFiles方法时的注意事项:
-
当主调是文件,或者路径不存在时,返回nulll。
-
当主调是空文件时,放回一个长度为0的数组。
-
当主调是一个有内容的文件夹时,将里面所有的一级文件和文件夹的路径放在File数组中返回。
-
当主调是一个文价夹,且里面有隐藏文件时,将里面所有文件和问价夹的路径放在File数组中返回,包含隐藏文件
-
当主调是一个文件夹,但是没有权限访问该文件夹时,返回null。