`

IO包之FilenameUtils

阅读更多
好吧 我承认我懒得看了,因为里面有点像编译器似的,字符操作,会死掉好的脑细胞的,当然正在学习Java的初学者,学这个不错


【一】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)
分享到:
评论

相关推荐

    commons-io 包

    7. **实用工具类**:如 `FilenameUtils` 提供了处理文件名和路径的工具,`EndianUtils` 用于字节序转换,`HexDump` 可以将字节数据转化为十六进制表示。 8. **输入/输出流包装器**:`FilterInputStream` 和 `...

    commons-io架包+文档.zip

    Commons-io是Java编程中一个非常重要的工具包,它提供了大量实用的I/O操作类和方法,极大地丰富了Java标准库中的I/O功能。这个压缩包"commons-io架包+文档.zip"显然包含了Apache Commons IO库的JAR文件以及相关的...

    commons-io-2.5 jar包.rar

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

    common-io.jarcommon-io.jar

    1. `org.apache.commons.io`: 这是最主要的包,包含了许多与I/O相关的工具类。 - `FileUtils`: 提供了一系列静态方法,用于执行常见的文件操作,如复制、移动、删除文件,以及读写文件内容。 - `IOUtils`: 包含了...

    apache commons IO 工具包使用

    Utility 类是 Commons IO 中最常用的部分之一,主要包括以下几种: - **FileUtils**:用于文件和目录的操作,例如复制、移动、删除文件或目录等。 - **IOUtils**:用于处理各种 Input/Output Stream 的操作,比如...

    commons-io-2.4.jar

    1. **FileUtils**: 这是Commons IO库的核心类之一,提供了大量的静态方法,用于执行各种文件操作。例如,`copyFile()`用于复制文件,`deleteQuietly()`用于删除文件但不抛出异常,`writeStringToFile()`用于将字符串...

    commons-io-2.6.zip

    5. **FilenameUtils**: 提供了一系列处理文件名和路径的方法,例如获取文件扩展名,或者检查路径是否为绝对路径。 6. **OutputStreamWriter和InputStreamReader**: 这两个类是用于读写字符流的,它们是将字符流与...

    commons io 源代码

    - ` FilenameUtils`:处理文件名和路径,提供安全的文件名验证。 2. 流操作: - `IOUtils`:提供了读写流的方法,例如复制流、关闭流和读取整个流到字符串等。 - `LineIterator`:方便地逐行读取输入流或字符...

    commons-io使用笔记

    Apache Commons IO 是一个Java库,提供了大量的实用工具类来处理输入/输出操作。这个库包含了对文件、流、字符集、缓冲区、过滤器、读写操作等多种IO操作的支持,大大简化了Java的IO编程。在"commons-io使用笔记"中...

    commons-io-2.6-src.zip

    总的来说,Apache Commons IO 是Java开发中不可或缺的工具之一,它简化了常见的I/O任务,提高了代码的可读性和可维护性。通过查看"commons-io-2.6-src.zip"的源码,开发者可以深入理解其工作原理,并根据需要自定义...

    jakarta_commons_io

    8. **FilenameUtils**: 提供了与文件名和路径操作相关的工具方法,如获取文件扩展名,或者比较两个文件名是否相等(不考虑路径)。 9. **LineIterator**: 一个迭代器,用于逐行读取文件或流,方便处理文本数据。 ...

    commons-io-2.2.jar

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

    commons-io.jar.rar

    **Java IO流**是Java平台的核心特性之一,用于读取和写入数据。IO流分为四类:字节流(Byte Stream)、字符流(Character Stream)、对象流(Object Stream)和套接字流(Socket Stream)。字节流处理原始字节数据,...

    commons-io-2.0-src

    1. **IOUtils**: 这是Apache Commons IO的核心类之一,提供了一系列静态方法,用于读取、复制和关闭流。例如,`IOUtils.copy()`方法可以用来高效地复制一个输入流到一个输出流,而`IOUtils.toString()`则能将一个...

    commons-io-2.8.0.rar

    9. **FilenameUtils**: 提供了一些方法来操作和分析文件名和路径,如获取文件扩展名、合并路径等。 10. **ByteOrderMark**: 用于识别和处理文件或流中的字节顺序标记(BOM),常在处理UTF-8、UTF-16等编码的文本...

    commons-io-2.4-src.zip

    7. **异常处理**:库中封装了许多自定义的异常类,如`org.apache.commons.io.IOCase` 和 `org.apache.commons.io.FilenameUtils` 中的异常,这些异常类为开发者提供了更精确的错误信息。 通过深入学习Apache ...

    commons io

    此外,还有 ` FilenameUtils ` 和 `IOCase`,它们帮助处理文件名和路径的解析,考虑到了不同的操作系统对大小写敏感性的差异。 2. **流处理**:`InputStream` 和 `OutputStream` 的包装器类,如 `...

    commons-io-2.6--java框架技术

    - ` FilenameUtils`和`PathUtils`: 提供了与文件名和路径相关的操作,例如获取扩展名、判断路径是否为绝对路径等。 2. **流处理**: - `IOUtils`: 这个类包含了许多静态方法,用于读取、写入、复制、关闭和检测流...

    commons-io-2.4.jar和相应doc

    Apache Commons IO库是Java开发者不可或缺的一个工具包,尤其在处理I/O操作时。它提供了大量的类和方法,极大地简化了对输入/输出流、文件、字符集、序列化等操作。这次我们关注的是它的2.4版本,即“commons-io-2.4...

    可以看成是java.io的扩展。它提供了文件阅读功能,以及一些使用的方法

    4. **FilenameUtils**: 该类提供了处理文件名和路径的工具方法,如`getExtension(String filename)` 用于获取文件的扩展名,`concat(String dir, String name)` 用于组合目录和文件名。 5. **DirectoryWalker**: 这...

Global site tag (gtag.js) - Google Analytics