在上一章节,介绍了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(); //不存在的话,创建多级目录
}

 这种判断并创建父目录的操作在很多情况下可能只需要一次,但是如果将这个判断一直保留在代码中的话,就会造成时间复杂度的提升。所以这个时候要想提升性能的话,清先保证各个目录已经创建。 

转载于:https://www.cnblogs.com/joshiniti/p/10481179.html

JavaのFile类基础操作之问题相关推荐

  1. java File类 常用相关函数

    java File类 相关函数 1.构建函数 2.判断相关函数 4.创建相关函数 5.删除相关函数 6.获取相关函数 1.构建函数 /*** File 构造方法* file 常用构造方法* 1: Fi ...

  2. Java File类总结和FileUtils类

    Java File类总结和FileUtils类 文件存在和类型判断 创建出File类的对象并不代表该路径下有此文件或目录. 用public boolean exists()可以判断文件是否存在. Fi ...

  3. 探究Java File类中list()、listFiles()的使用及区别,认识和使用匿名内部类

    转载自     探究Java File类中list().listFiles()的使用及区别,认识和使用匿名内部类 内容概要: 1.认识File类: 2.File的构造函数: 3.list()及其重载方 ...

  4. java File类

    java File类 今天我要总结一下java File类.这个是一个很重要的类. 首先是我画的思维导图. 还写了一些自己写的代码. /*** Date : 2017/6/24* Author : H ...

  5. C++的File类文件操作(转)

    C++的File类文件操作 语言文件系统称为流文件(Stream),正文流(正文文件),二进制流(二进制文件) 缓冲与非缓冲文件 顺序操作文件与随机操作文件 顺序文件:读/写第K个数据块之前必须读/写 ...

  6. C++的File类文件操作

    C++的File类文件操作 语言文件系统称为流文件(Stream),正文流(正文文件),二进制流(二进制文件) 缓冲与非缓冲文件 顺序操作文件与随机操作文件 顺序文件:读/写第K个数据块之前必须读/写 ...

  7. Java File类(文件操作类)详解

    在 Java 中,File 类是 java.io 包中唯一代表磁盘文件本身的对象,也就是说,如果希望在程序中操作文件和目录,则都可以通过 File 类来完成.File 类定义了一些方法来操作文件,如新 ...

  8. java取模多位数_JAVA大数类—基础操作(加减乘除、取模、四舍五入、设置保留位数)...

    当基础数据类型长度无法满足需求时可以使用大数类 构造方法接受字符串为参数 1 BigInteger bInt = new BigInteger("123123");2 BigDec ...

  9. Java中的File类常用操作

    文章目录 File类是干什么的呢? 一.File类创建对象 1.public File(String pathname)方式创建对象,代码如下 2.public File(String parent, ...

最新文章

  1. 用一个创业故事串起操作系统原理(二)
  2. 求助:谁可以给我点share point 开发的资料
  3. iOS Extension 里的方法不执行
  4. java中的for-each循环
  5. Redis数据库如何实现读写分离
  6. 安装spss显示JAVA_请问mac安装spss,出现“java for MacOS 2017-001”无法安装到磁盘。怎么办?...
  7. 微信小程序 环形进度条_微信小程序:实时圆形进度条实现
  8. github 码云 获取_开发记录篇使用VS2019管理github项目
  9. 网络调试分析的工具①
  10. 智能随访系统:提升患者综合服务能力和就医体验,提高医院品牌价值与服务质量
  11. 【装机】关于WINRE/ESP/LRS_ESP/MSR/PBR这些分区
  12. 小米手机 Toast显示带应用名称问题解决方法
  13. 关于Win8引导菜单风格切换
  14. Windows如何查看IIS访问IP记录
  15. 计算机计算建筑结构的方法有哪些,建筑结构设计包括哪些内容呢?
  16. java集合面试锦集
  17. Xshell SSH免密登录
  18. 主流微服务注册中心浅析和对比 1
  19. 关于Qt上位机与下位机stm32数据传输的解析问题(一)
  20. 一位36岁程序员的困惑

热门文章

  1. iOS 相册和网络图片的存取
  2. UIImage图片拉伸方法
  3. flash模拟EEROM
  4. xunsearch 迅搜初探
  5. [C#] enum 枚举
  6. ecshop模板smarty foreach详解 [ECshop]
  7. Linux(centOS)手动安装Apache+MySQL+PHP+Memcached+Nginx原创无错版
  8. 【数据库】sqlite3数据库备份、导出方法汇总
  9. php禁止代理ip访问_php禁止某ip或ip地址段访问的方法
  10. 设备树与驱动的关系_Linux I2C驱动竟然如此简单?手把手教你写i2c驱动