在上一章节,介绍了File类的基础操作,比如文件的创建,文件的删除等等。这一章节,将介绍在File类基础操作中遇到的问题。
1.路径分割符问题
在实际的软件开发与运行过程中,往往都会在Windows环境下进行项目的开发,然后在项目部署的时候基于Linux或Unix系统来进行项目的发布。以保证生产环节的安全性。
但是在不同的操作系统中,会存在不同的路径分割符。例如:Windows为'\',Linux为'/'。所以在最初的项目开发的时候就必须考虑不同操作系统下的路径分割符的问题,所以为了解决此问题File类提供了一个常量: separator 。 定义如下:
public static final String separator;
可以发现一个问题:在Java语言中,常量一般采用字母大写形式,而separator并没有采用大写形式,主要原因是在Java语言最初设计的时候,常量的命名与普通变量命名一样,随着Java语言的发展,常量的命名就被大写字母化了(历史遗留问题)。所以正常的路径编写如下:
File file = new File("D:" + File.separator + "joshiniti.txt");
File.separator将针对不同的操作系统,采用不同的系统路径分割符。
但是, 随着系统的适应性的不断加强,对于当前的路径分割符也可以随意使用了,例如:
File file = new File("D:/joshiniti.txt");
此时采用了Linux的路径分割符'/',但是程序依然可以在Windows环境下运行。所以在编写路径分割符的时候,使用任何一种都可以,但是强烈建议使用File.separator。
2.在使用File类进行文件处理的时候,需要注意的是: 程序 → JVM → 操作系统函数 → 文件处理。所以在进行同一文件的反复创建删除操作的时候有可能出现延迟的问题,此时最好的解决方案是别重名。
3.在进行文件创建的时候有一个最要的前提:文件的父路径必须存在。
实例:在一个不存在的文件目录下(hello),创建一个文件(joshiniti.txt)。
File file = new File("D:"+ File.separator +"hello"+ File.separator +"joshiniti.txt");if(!file.exists()){ try{ file.createNewFile(); }catch(IOException e){ System.out.println("失敗"); } }
以上代码执行后,"失败"会被输出。在实行创建语句的时候,出现了一个IOException异常。而出现该异常的根本原因在于:该文件的父路径不存在。为了解决该问题,先介绍几个File类的其他常用方法:
①得到父文件
public File getParentFile();
②创建目录
public boolean mkdir(); //创建单级目录
public boolean mkdirs(); // 创建多级目录
通过以上方法,可以在创建文件时保证父路径的存在,代码如下:
File file = new File("D:"+ File.separator +"hello"+ File.separator +"joshiniti.txt");if(!file.getParentFile().exists()){ //判断父路径文件是否存在 file.getParentFile().mkdirs(); //不存在的话,创建多级目录 }
这种判断并创建父目录的操作在很多情况下可能只需要一次,但是如果将这个判断一直保留在代码中的话,就会造成时间复杂度的提升。所以这个时候要想提升性能的话,清先保证各个目录已经创建。