`
sunxboy
  • 浏览: 2869158 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

使用Apache commons IO包规范文件名

阅读更多

【一】Apache commons IO包之FilenameUtils

在使用JDK的File类构建目录、文件对象时,通常会碰到以下的问题:

 ①分隔符的问题:Unix系统和Windos系统的路径分隔符、换行符不同
 ②路径规范的问题:有些API对于返回的目录路径不带"/",有些则有
 ③文件名规范的问题:有些文件名中间带有空格,导致程序解析错误

上面的问题虽然不算复杂,却也恼人。有时候甚至会在这些问题上耗费大量的时间。于是Apache commons io包提供了一个FilenameUtils类来专门帮助我们解决这样的问题。根据Apache common io的说法:你可以通过使用JDK自带的File类构造方法File(String parent, String child)来避免使用这个类,但是实际上这个类还是很有用的!

【二】Apache commons IO包中对路径的定义

要了解Apache commons IO包如何处理路径文件名的问题,首先要知道Apache中如何定义关于路径的参数:

关于路径有3个概念:
 ①前缀:盘符或者根目录
 ②路径:从前缀或根目录开始直至文件的所在目录
 ③全路径:包含了前缀和路径

要注意的是:在Apache的所以关于路径的概念中,都是以分隔符结尾的。因为按照Apache的说法,如果没有提供分隔符,它将不能正确地识别路径代表的是一个目录还是一个文件,在这种情况下只能选择将其识别为一个文件。

关于文件名也有3个概念:
 ①基本名称:不包含路径和扩展名的部分
 ②扩展名称:从.开始直至结束的部分
 ③文件名称:包含了基本名称和扩展名称

要注意的是:扩展名并不包含"."

在路径概念中,前缀是一个很重要的概念:因为它告诉了程序应该从那里开始识别,在Apache commons IO包中,使用如下规则去获取前缀:


【三】常用API

①路径规范

首先要介绍的就是normalize方法,这个方法用于对各种类型的路径进行规范,它的规则如下:

A trailing slash will be retained.
A double slash will be merged to a single slash (but UNC names are handled).
A single dot path segment will be removed.
A double dot will cause that path segment and the one before to be removed.
If the double dot has no parent path segment to work with, null is returned


下面是官网上面的一个例子:


要特别注意的是:这个方法总是会返回一个结尾带有"/"的路径,如果你不需要这个分隔符,那么你可以调用另外一个方法:normalizeNoEndSeparator(String filename)。

②路径的比较

有点时候我们需要比较两个路径是否代表了同一个资源,但是由于路径写法或者API调用的不同,即便同一个对象也有可能返回false的结果。于是Apache提供了一个直接简便的方法:equals。这个方法的完整签名是:

 static boolean equals(String filename1, String filename2,
                               boolean normalized, IOCase caseSensitivity)

其中normalized参数表示在比较前是否要进行规范,通常都是true,参数caseSensitivity表示是否大小写敏感。这个参数有3个可选择的选项,他们分别是:
 ※ IOCase.INSENSITIVE
 ※ IOCase.SENSITIVE
 ※ IOCase.SYSTEM

通常为了移植性我们都会选择IOCase.SYSTEM,即根据系统的类型自动决定。

③路径获取

分为path和full path两种情况,可用的API有:

 ※ getFullPath(String filename)/getFullPathNoEndSeparator(String filename)
 ※ getPath(String filename)/getPathNoEndSeparator(String filename)
 
④路径的截取

包含了对扩展名的位置判断和分隔符的位置判断。设想一下假如现在有这样的一个路径:C:/path/my.file/you.txt

如果我们要获取扩展名,使用indexOf('.'),那么返回的将是错误的结果。使用Apache commons IO提供的indexOfExtension(String filename)方法,将会首先检查在"."后是否还有"/"分隔符。

该方法内部默认调用了另外一个方法:indexOfLastSeparator(String filename)

⑤文件名的获取

分为全文件名,基本文件名,扩展名。可用的API有:

 ※ getName(String filename)
 ※ getBaseName(String filename)
 ※ getExtension(String filename)

分享到:
评论

相关推荐

    org.apache.commons.io 的jar包大全

    通过使用Apache Commons IO库,开发者可以避免编写重复的IO代码,提高代码质量并减少错误。由于其广泛的功能和易用性,这个库在Java开发中被广泛应用。如果你在压缩包中找到了"org.apache.commons.io"的jar包,这...

    apache commons IO工具包

    ### Apache Commons IO工具包知识点详解 #### 一、Apache Commons IO概述 Apache Commons IO是Apache Commons项目中的一个子项目,它提供了一系列与IO操作相关的工具类。这些工具类旨在简化和增强Java平台上的文件...

    apache commons IO 工具包使用

    ### Apache Commons IO 工具包使用 #### 一、Apache Commons IO 概述 Apache Commons IO 是 Apache Commons 项目下的一个子项目,主要用于提供一系列针对 Java IO 操作的实用工具类。这些工具类大大简化了文件和流...

    commons-fileupload和commons-io的jar包

    在实际开发中,Apache Commons FileUpload通常与Apache Commons IO结合使用,FileUpload负责解析上传的文件数据,而IO库则帮助开发者完成文件的保存、移动或处理。例如,开发者可以先使用FileUpload解析出上传的文件...

    commons-io-2.6.jar

    《Apache Commons IO 2.6在Java开发中的应用详解》 Apache Commons IO是Apache软件基金会的一个开源项目,它提供了一系列实用的I/O操作工具,极大地简化了Java开发中与输入/输出相关的任务。其中,`commons-io-2.6....

    commons-io 包

    Apache Commons IO 是一个Java库,专门设计用于处理输入/输出(I/O)操作。这个库提供了大量的实用工具类,简化了常见的I/O任务,使开发者能够更高效、更方便地处理文件、字节流、字符流以及各种I/O相关的操作。 在 ...

    commons-io-2.6-src.zip

    与"commons-fileupload.jar"配合使用时,Apache Commons IO 可以帮助处理文件上传过程中的临时文件操作、流的读写等。Apache Commons FileUpload 是一个专门处理HTTP请求中多部分数据(如表单上传文件)的组件,而...

    commons io 源代码

    Apache Commons IO 是一个Java库,提供了大量的工具类来处理日常的输入/输出操作。这个库包含了许多实用的类,帮助开发者处理文件、流、过滤器、读写操作等各种IO任务。"commons io 源代码"是Apache Commons IO库的...

    commons-io-2.5 jar包.rar

    Apache Commons IO库是Java开发中一个非常重要的工具包,它为处理输入/输出(I/O)提供了大量的实用类和方法。这个库特别适用于那些需要在Java应用程序中进行文件操作、流处理、字符集转换等任务的开发者。"commons-io...

    使用commons fileupload 和commons io jar包操作实例项目

    - 首先,引入Apache Commons FileUpload和Commons IO的jar包到项目类路径中。 - 创建一个`DiskFileItemFactory`,它定义了临时存储文件的位置和大小限制。 - 使用`ServletFileUpload`类创建一个解析器,设置工厂...

    org.apache.commons.io.jar

    Apache Commons IO遵循Apache License 2.0,这是一个宽松的开源许可证,允许自由使用、修改和分发代码,只需保留原有的版权和许可证信息即可。压缩包中的`commons-license.txt`文件即为该库的许可证文件,详细描述了...

    commons-io-2.6.zip

    Apache Commons IO 是一个Java库,专门设计用于处理输入/输出(I/O)操作,极大地简化了在Java应用程序中进行此类操作的复杂性。...通过使用Apache Commons IO,开发者可以更加专注于业务逻辑,而不是底层的I/O操作。

    commons-fileupload-1.2.1.jar 和commons-io-1.4.jar

    Apache Commons FileUpload与Apache Commons IO是Java开发中处理文件上传的两个重要库,它们在Web应用中被广泛使用。这两个库分别提供了不同的功能,但在处理文件上传时常常一起使用。 `commons-fileupload-1.2.1....

    jar包-commons-io-2.4.jar

    "jar包-commons-io-2.4.jar" 这个标题表明我们正在讨论一个Java Archive (JAR) 文件,具体是Apache Commons IO库的2.4版本。JAR文件是Java平台特有的归档格式,用于集合多个Java类文件、资源文件以及其他元数据,...

    commons-fileupload-1.3.3.jar和commons-io-2.6.jar

    在Java开发中,上传文件是一项常见的任务,而`commons-fileupload-1.3.3.jar`和`commons-io-2.6.jar`是Apache Commons项目中的两个重要库,专门用于处理HTTP请求中的文件上传功能。这两个库为开发者提供了便捷、高效...

    commons-fileupload-1.3.2和commons-io-2.5

    Apache Commons IO是另一个广泛使用的库,它提供了大量的实用工具类,用于执行各种I/O操作。2.5版本的Commons IO可能包含了新的特性、优化和错误修复。这个库包括了文件操作(如复制、移动、删除),流操作,字符...

    commons-io-2.2.jar

    Apache Commons IO库是Java开发中一个非常重要的工具包,它为Java的IO操作提供了大量实用且功能丰富的类和方法。这个库的版本"commons-io-2.2.jar"包含了从低级到高级的各种IO操作的支持,极大地简化了开发者的代码...

    commons-io.zip

    Apache Commons IO 是一个Java库,提供了大量的实用工具类来处理输入/输出(I/O)操作。这个库极大地简化了处理文件、流、字符集、读写操作等任务,使得开发人员可以更加专注于业务逻辑,而不是底层的I/O细节。标题中...

    java+servlet+commons-io-2.4.jar+commons-fileupload-1.3.jar实现文件的上传与下载

    本教程将深入讲解如何使用Java Servlet、Apache Commons IO库(版本2.4)以及Apache Commons FileUpload库(版本1.3)来实现这一功能。 一、Apache Commons IO与FileUpload库介绍 Apache Commons IO是一个Java库,...

    org.apache.commons包

    3. **Commons IO**: 专注于输入/输出操作,提供了许多实用工具类,如文件和流的读写、文件的复制、文件名和路径的处理等。它简化了文件操作,使得代码更简洁。 4. **Commons Math**: 提供了基础数学和统计功能,如...

Global site tag (gtag.js) - Google Analytics