File类基本操作
在Java语言里面提供有对于文件操作系统操作的支持,而这个支持就在java.io.File类中进行了定义,也就是说在整个java.io包里面,File类是唯一一个与文件本身操作(创建、删除、重命名等等)有关的类,而如果要想进行File类的操作,必须要提供有完整的路径,而后可以调用相应的方法进行处理。
File类的基本使用
打开JDK文档可以发现,File类是Comparable接口的子类,所以File类的对象是可以进行排序处理的。(为什么要排序?在window里面对文件可以进行创建日期排序,大小排序,名称排序等等)。而在File类进行处理的时候需要为其设置访问路径,那么对于路径的配置主要通过File类的构造方法进行处理。 File类是与文件本身有关的,但是和文件内容是没有关系的,内容的操作不是File类的功能。
如果现在要想进行文件的基本操作,可以使用如下的方法:
创建新的文件:public boolean createNewFile() throw IOException
判断文件是否存在:public boolean exists();
删除文件:public boolean delete();
通过代码可以发现,File类实现的就是文件本身的处理(构造重要,判断是否存在,删除重要,以后用的到)。
File类操作深入
现在已经实现了文件的基础操作,但是对于这个操作里面也是存在有一些问题的,下面针对之前的代码进行优化处理。
1、 在实际的软件项目开发和运行的过程之中,往往都会在Windows中进行项目的开发,而在项目部署的时候基于Linux或Unix系统来进行项目发布以保证生产环节的安全性;
在不同的操作系统之中会存在有不同的路径分隔符:Window分隔符“”,Linux分隔符“/”,所以在最初进行开发的时候就必须考虑不同系统环境下的分隔符问题,所以为了解决此问题,File类提供有一个常量
常量不应该全是大写吗?这个是java的历史遗留问题,之前常量全部小写的,而用它来编写的正在运行的程序又不能修改了。
但是随着系统的适应性的不断加强,对于当前的路径操作,也可以随意使用
2、 在使用File类进行文件处理的时候需要注意的是:程序---->JVM--->操作系统函数--->在磁盘上(文件处理)。所以在进行同一文件的反复删除或创建的时候有可能会出现有延迟的问题,所以这个时候最好的方案是别重名;
这种判断并且建立父目录的操作在很多的情况下可能只需要一次,但是如果将这个判断(父目录是否有)一致都停留在代码里面,那么就会造成时间复杂度的提升,所以这个时候如果想要提升性能,请先保证目录已经创建。(可以提升一点点的性能,性能都是一点点的抠出来的)。
获取文件信息
除了可以进行文件的操作之外也可以通过File类来获取一些文件本身提供的信息,可以获取如下内容。
既然可以判断给的路径是目录还是文件,那么就可以进一步的判断,如果发现是目录,则应该列出目录中的全部内容:
这些信息的获得都是文件或目录本身的操作,都是不涉及到文件内容处理的。
综合案例:列出目录结构(这类程序必须写熟的,面试也会考)
现在可以由开发者任意设置一个目录路径,而后将这个目录中所有的文件的信息全部列出,包括子目录中的所有文件。在这样的处理情况下最好的做法就是利用递归的形式来完成。
如果现在将路径输出变为删除操作,那么就彻底删除路径。(先备份准备好,别学携程删库跑路)
综合案例:文件批量更名(笔试常见)
编写程序,程序运行时输入目录名称,并把该目录下的所有文件名后缀修改成.txt。
对于这类的操作。必须设置一些假设的约定,能够重命名的文件都是有后缀的,如果没有后缀的路径,则为其追加路径,如果有后缀的路径,则必须以最后一个“.” 进行截取。
在实际面试过程中经常会出现给你一个路径而后让你进行名称或文件的批量修改操作,那么就采用以上的代码结果即可(一定要记住)。