准备跳槽面试,今天开始复习Java基础。希望基础差的同学看完本文能掌握泛型,基础好的同学有权复习。希望看完这篇文章,能唤醒你的青春记忆。1.什么是File类?java.io.File类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找、删除等操作。2.File类的使用2.1构造方法File类的构造方式有3种:publicFile(Stringpathname):createpublicFile(Stringparent,Stringchild)直接通过文件路径string:createpublicFile(Stringparent,Stringchild)通过父子路径stringsFileparent,Stringchild):先创建父文件对象,再结合子路径创建/***ProjectName:review_java
*PackageName:com.nasus.io.file
*日期:2020/1/322:22
**@author
*/publicclassFileConstruct{publicstaticvoidmain(String[]args){//文件路径名Stringpathname="Z:\\file\\file.txt";文件file1=新文件(路径名);System.out.println(file1);//传递父路径和子路径字符StringStringparent="Z:\\file";Stringchild1="file.txt";文件file2=newFile(parent,child1);System.out.println(file2);//传递父文件对象和子路径StringFileparentDir=newFile("Z:\\file");Stringchild2="文件.txt";文件file3=newFile(parentDir,child2);系统输出文件ntln(文件3);}}上面展示了三种创建File对象的方法,需要说明的是:一个File对象代表硬盘中的一个目录或文件,该目录或文件是否存在于硬盘中并不影响其状态文件对象的。创建2.2函数获取方法publicStringgetAbsolutePath():返回指定File实例的绝对路径publicStringgetPath():将指定File实例的抽象路径名转换为路径名字符串publicStringgetName():返回指定File实例publiclonglength()的目录或文件名:返回指定File实例的文件长度。在硬盘Z:file下新建一个file.txt,文件内容为26个英文字母。/***项目名称:review_java
*包名称:com.nasus.io.file
*日期:2020/1/411:01
**@author
*/publicclassFileGet{publicstaticvoidmain(String[]args){Filefile1=newFile("Z:"+File.separator+"文件"+文件分隔符+"文件.txt");System.out.println("绝对文件路径:"+file1.getAbsolutePath());System.out.println("文件构建路径:"+file1.getPath());System.out.println("文件名:"+file1.getName());System.out.println("文件长度:"+file1.length()+"bytes");System.out.println("------------------------");//表示根目录,Windows下:File.separator+"file"="\\file"Filefile2=newFile(File.separator+"file");//绝对路径System.out.println("目录绝对路径:"+file2.getAbsolutePath());//构造File实例时的PathSystem.out.println("目录构造路径:"+file2.getPath());System.out.println("目录名:"+file2.getName());//文件示例是一个目录,所以长度=0System.out.println("Directorylength:"+file2.length());}}File的get方法如上例,值得注意的是:getPath()和getAbsolutePath()的区别在于前者在构造File实例时获取路径,而后者获取的是绝对路径文件实例。当构造File实例的路径也是绝对路径时,两者是一样的。2.3绝对路径和相对路径绝对路径:从盘符开始的完整路径相对路径:相对于你当前项目目录的路径,这个路径在开发中经常使用/***项目名称:review_java
*包名:com.nasus.io.file
*日期:2020/1/411:29
**@author
*/publicclassFilePath{publicstaticvoidmain(String[]args){//Z盘下的file.txt文件Filefile=newFile("Z:\\file.txt");系统输出。println(file.getAbsolutePath());//项目下的file.txt文件Filefile2=newFile("file.txt");System.out.println(file2.getAbsolutePath());}}outputresult:Z:\file.txtZ:\IDEAProject\review\review_java\file.txt2.4判断函数的方法判断函数主要有3种方法,输出都是布尔值:publicbooleanexists():指定File实例代表的文件或目录是否存在publicbooleanisDirectory():指定File实例是否为目录publicbooleanisFile():指定File实例是否为文件/***项目名称:review_java
*包名:com.nasus.io.file
*日期:2020/1/411:37
**@author
*/publicclassFileIs{publicstaticvoidmain(String[]args){Filefile1=newFile("Z:\\file\\file.txt");文件file2=newFile("Z:\\file");//判断是否存在System.out.println("Z:\\file\\file.txtexists:"+file1.exists());System.out.println("Z:\\fileexists:"+file2.exists());//判断文件System.out.println("Z:\\file\\file.txtfile?:"+file1.isFile());System.out.println("Z:\\file?:"+file2.isFile());//判断目录System.out.println("Z:\\file\\file.txtDirectory?:"+file1.isDirectory());System.out.println("Z:\\filedirectory?:"+file2.isDirectory());}}输出结果:是否Z:\file\file.txtExists:trueZ:\fileExists:trueZ:\file\file.txtfile?:trueZ:\filefile?:falseZ:\file\file.txtdirectory?:falseZ:\filedirectory?:true2.5用删除创建methodpublicbooleancreateNewFile():当File实例指定的文件不存在时,创建一个空文件publicbooleandelete():删除指定File实例代表的文件或目录publicbooleanmkdir():创建代表的目录通过指定的File实例publicbooleanmkdirs():创建指定的File实例所代表的目录,以及父目录/***ProjectName:review_java
*PackageName:com.nasus.io.file
*Date:2020/1/411:49
**@author
*/publicclassFileCreateDelete{publicstaticvoidmain(String[]args)throwsIOException{System.out.println("-----创建文件------");//创建文件Filefile1=newFile("file1.txt");System.out.println("是否存在:"+file1.exists());//falseSystem.out.println("是否创建:"+file1.createNewFile());//trueSystem.out.println("是否存在:"+file1.exists());//trueSystem.out.println("-----创建目录------");//目录创建文件file2=newFile("fileDir");System.out.println("是否存在:"+file2.exists());//falseSystem.out.println("是否创建:"+file2.mkdir());//trueSystem.out.println("是否存在:"+file2.exists());//trueSystem.out.println("-----创建多级目录-----");//创建多级目录Filefile3=newFile("fileDir1\\fileDir2");System.out.println(file3.mkdir());//假文件file4=newFile("fileDir1\\fileDir2");System.out.println(file4.mkdirs());//trueSystem.out.println("-----删除文件------");//文件删除System.out.println(file1.delete());//trueSystem.out.println("-----删除目录------");//删除目录System.out.println(file2.delete());//trueSystem.out.println(file4.delete());//false}}2.6目录遍历publicString[]list():返回一个String数组,代表指定File实例目录下的所有子文件或目录publicFile[]listFiles():返回一个File数组,代表指定File实例目录下的所有子文件或目录。/***项目名称:review_java
*包名称:com.nasus.io.file
*日期:2020/1/412:02
**@author
*/publicclassFileList{publicstaticvoidmain(String[]args){Filedir=newFile("Z:\\IDEAProject");//获取当前目录下的文件和文件夹的名称,这个用处不大。字符串[]名称=dir.list();for(Stringname:names){System.out.println(name);}System.out.println("----------------------------");//获取当前目录下的文件和文件夹对象,获取文件对象,可以做更多操作,项目常用File[]files=dir.listFiles();for(Filefile:files){System.out.println(file);}}}值得注意的是:无论是list()还是listFiles()方法,指定的File实例都必须真实存在于硬盘中,否则无法遍历。3.递归3.1什么是递归?意思是程序在某个方法中调用自己的操作。3.2递归的分类递归有两种类型:直接递归:称为调用自身的方法。间接递归:方法A可以调用方法B,方法B可以调用方法C,方法C可以调用方法A。3.3递归使用规范递归必须有条件限制,保证递归可以停止,否则会出现栈内存溢出。递归虽然有限制,但是递归的次数不能太多。否则构造方法也会出现栈内存溢出,禁止递归。四、递归的使用如果你不知道什么时候使用递归?那么这里有个很简单的规律:当你确定递归的次数不会造成内存溢出时,就可以使用;否则,不要使用它。递归有很多使用场景,比如递归求和,递归阶乘。递归多级目录、遍历文件、查找文件在开发中比较常用。它是这样实现的:/***项目名称:review_java
*包名称:com.nasus.io.file
*日期:2020/1/412:15
**@author
*/publicclassFileSearch{publicstaticvoidmain(String[]args){//创建一个文件对象Filedir=新文件("Z:\\IDEAProject");//调用文件搜索方法searchFile(dir);}publicstaticvoidsearchFile(Filedir){//获取子文件和目录File[]files=dir.listFiles();//循环for(Filefile:files){//判断if(file.isFile()){//输出搜索到的目标文件绝对路径if("FileIs.java".equals(file.getName())){System.out.println("目标文件路径:"+file.getAbsolutePath());}}else{//是一个目录,自己调用,形成一个递归的searchFile(file);}}}}输出结果:目标文件路径:Z:\IDEAProject\review\review_java\src\main\java\com\nasus\io\file\FileIs.java5.源码地址Github源码地址:https://github.com/turoDog/review_java最后,如果你看到这篇文章并点赞,帮忙“转发”或者点“在看”,好吗?祝你2020年发财微信搜索“一个优秀的废人”,欢迎关注。回复“1024”送你全套java、python、c++、go、前端、linux、算法、大数据、人工智能、小程序及英文教程。回复“电子书”送你50+本java电子书。
