- 浏览: 313644 次
- 性别:
- 来自: 重庆
文章分类
- 全部博客 (286)
- 设计模式 (14)
- spring (5)
- 开发工具 (12)
- java (19)
- apache.commons工具 (7)
- ibaits (5)
- extjs4.0 (4)
- 数据库 (2)
- spring工具类 (2)
- jquery1.8 (32)
- 杂记 (1)
- linux (2)
- Quart (1)
- springMVC (2)
- webservice (1)
- oracle (5)
- dwr (6)
- jbmp3 (27)
- lucene3.5 (27)
- javascript (18)
- hibernate3.3.2 (27)
- spring事务管理 (10)
- nio (2)
- strust2 (3)
- jvm (7)
- jquery-easyui-1.2.6 (22)
- 多线程 (14)
- maven (3)
- 常用正则表达式 (4)
最新评论
-
HF_SKY000:
请问:
一、能否提供一下密钥库文件的生成方法?
二、密钥库的密 ...
Java sslSocket 聊天实例
①资源的创建、删除
※ 目录的创建:
forceMkdir(File
directory)
,这个方法可以在父目录不存在的情况下,连续创建多个目录。但如果同名的目录已经存在或者无权创建,则抛出异常
※ 文件的创建:
touch(File
file)
,这个方法用于创建一个size为0的文件,然后迅速关闭输出流。如果文件已经存在则简单地修改一下文件的modify
time
※ 目录/文件的删除:
void
deleteDirectory(File directory)
,递归地删除目录及其下的所有内容。
boolean deleteQuietly(File
file)
,相比于JDK的delete()方法有两个不同:首先它不需要被删除目录下的内容为空,其次它不会抛出任何IOException。
void forceDelete(File
file)
,强行删除file对象,如果是目录对象则递归删除子目录。如果删除失败则显式地抛出IOException。
void forceDeleteOnExit(File
file)
,当JVM退出时,把file对象删除。如果是目录对象则递归删除子目录。
②资源的复制、移动
※ 复制目录或文件
copyDirectory(File srcDir, File
destDir, FileFilter filter, boolean
preserveFileDate)
,这个方法用于把源目录及其下面的子目录,文件一起拷贝到目标位置(名称可改)。而且该方法允许在拷贝的过程中进行过滤,指定仅拷贝那些符合条件的资源。最后一个选项用来表明是否保留文件原有的创建、修改日期还是使用最新的日期。
copyDirectoryToDirectory(File
srcDir, File
destDir)
,这个方法和上面的区别在于:首先上面的方法是拷贝到destDir的位置,而这个方法是拷贝到destDir“之下”的位置。其次上面的方法可以在拷贝的同时改名,这个方法不能,拷贝后仍然使用原来的名称。
copyFile(File
srcFile, File destFile, boolean
preserveFileDate)
,类似于上面的copyDirectory方法。
copyFileToDirectory(File
srcFile, File destDir, boolean
preserveFileDate)
,类似与上面的copyDirectoryToDirectory方法。
※ 移动目录或文件
moveToDirectory(File srcFile, File destDir, boolean
createDestDir)
,这个方法用于移动一个文件或者目录到指定位置。
③资源的读写
这一部分是FileUtils的精华部分。
※
读入文件
FileUtils支持对文件以字节数组,字符串,行的方式读入。对应方法分别是:
byte[]
readFileToByteArray(File file)
String readFileToString(File file)
String
readFileToString(File file, String encoding)
List readLines(File
file)
List readLines(File file, String encoding)
这里我们关心的是对于大文件,FileUtils是如何读入的?看看下面的源代码:
* Reads the contents of a file into a String.
* The file is always closed.
*
* @param file the file to read, must not be <code>null</code>
* @param encoding the encoding to use, <code>null</code> means platform default
* @return the file contents, never <code>null</code>
* @throws IOException in case of an I/O error
* @throws java.io.UnsupportedEncodingException if the encoding is not supported by the VM
*/
public static String readFileToString(File file, String encoding) throws IOException {
InputStream in = null ;
try {
in = openInputStream(file);
return IOUtils.toString(in, encoding);
} finally {
IOUtils.closeQuietly(in);
}
}
可以见到这个方法调用了IOUtils的toString方法,那么这个过程的底层细节是如何的呢?
throws IOException {
StringWriter sw = new StringWriter();
copy(input, sw, encoding);
return sw.toString();
}
public static void copy(InputStream input, Writer output, String encoding)
throws IOException {
if (encoding == null ) {
copy(input, output);
} else {
InputStreamReader in = new InputStreamReader(input, encoding);
copy(in, output);
}
}
/** */ /**
* Copy bytes from a large (over 2GB) <code>InputStream</code> to an
* <code>OutputStream</code>.
* <p>
* This method buffers the input internally, so there is no need to use a
* <code>BufferedInputStream</code>.
*
* @param input the <code>InputStream</code> to read from
* @param output the <code>OutputStream</code> to write to
* @return the number of bytes copied
* @throws NullPointerException if the input or output is null
* @throws IOException if an I/O error occurs
* @since Commons IO 1.3
*/
public static long copyLarge(InputStream input, OutputStream output)
throws IOException {
byte [] buffer = new byte [DEFAULT_BUFFER_SIZE];
long count = 0 ;
int n = 0 ;
while ( - 1 != (n = input.read(buffer) )) {
output.write(buffer, 0 , n);
count += n;
}
return count;
}
可以看到,Apache
commons
IO的底层是采用InputStreamReader来读的,而且是连续不断地在内存中构造String对象,如果有一个2G文件,那么将会在内存中构造一个2G的String对象。
※
写入
文件
void writeLines(File file, String
encoding, Collection lines, String
lineEnding)
,这个用法用于将内存中一个集合的内容持久化到本地文件,以行的方式写入每一个集合元素。可以指定编码和换行符。
这个方法的适用场景类似于:将内存中的一批“客户信息集合”导出到文件中
OutputStream out = null ;
try {
out = openOutputStream(file);
IOUtils.writeLines(lines, lineEnding, out, encoding);
} finally {
IOUtils.closeQuietly(out);
}
}
public static void writeLines(Collection lines, String lineEnding,
OutputStream output, String encoding) throws IOException {
if (encoding == null ) {
writeLines(lines, lineEnding, output);
} else {
if (lines == null ) {
return ;
}
if (lineEnding == null ) {
lineEnding = LINE_SEPARATOR;
}
for (Iterator it = lines.iterator(); it.hasNext(); ) {
Object line = it.next();
if (line != null ) {
output.write(line.toString().getBytes(encoding));
}
output.write(lineEnding.getBytes(encoding));
}
}
}
void writeStringToFile(File file,
String data, String encoding)
,这个方法将字符串一次性写入文件
throws IOException {
if (data != null ) {
if (encoding == null ) {
write(data, output);
} else {
output.write(data.getBytes(encoding));
}
}
}
④资源的比较
※
文件时间比较
boolean isFileNewer(File file,
Date/File/Long) 和boolean isFileOlder(File file,
Date/File/Long)
两种方法,这两种方法的内部都是采用文件的last modify time进行比较的。
※ 文件内容比较
boolean contentEquals(File file1, File
file2)
采用逐字节比较的方式,在正式比较内容之前,会先比较以下项目:存在性、类型、长度、链接指向,最后才是比较内容
InputStream input2 = null ;
try {
input1 = new FileInputStream(file1);
input2 = new FileInputStream(file2);
return IOUtils.contentEquals(input1, input2);
} finally {
IOUtils.closeQuietly(input1);
IOUtils.closeQuietly(input2);
}
public static boolean contentEquals(InputStream input1, InputStream input2)
throws IOException {
if ( ! (input1 instanceof BufferedInputStream)) {
input1 = new BufferedInputStream(input1);
}
if ( ! (input2 instanceof BufferedInputStream)) {
input2 = new BufferedInputStream(input2);
}
int ch = input1.read();
while ( - 1 != ch) {
int ch2 = input2.read();
if (ch != ch2) {
return false ;
}
ch = input1.read();
}
int ch2 = input2.read();
return (ch2 == - 1 );
}
⑤资源的过滤
FileUtils提供了两种类型的方法让使用者可以轻松地过滤文件、目录。它们分别是:
※
基于Iterator形式的过滤
iterateFiles(File directory, IOFileFilter fileFilter,
IOFileFilter
dirFilter)
,这个方法用于从指定的目录下过滤文件。通过fileFilter我们可以指定要过滤的文件类型,通过dirFilter我们可以指定是否对子目录进行同样的过滤。如果为null则子目录不参与过滤。
iterateFiles(File directory, String[] extensions, boolean
recursive)
,这个方法用于从指定的目录下过滤文件。通过extensions我们可以指定要过滤的文件扩展名,通过recurisve我们可以指定是否对子目录进行同样的过滤。如果为false则子目录不参与过滤。
※
基于Collection形式的过滤
listFiles(File
directory, IOFileFilter fileFilter, IOFileFilter
dirFilter)
,这个方法和基于Iterator形式的过滤相同,只是返回的值是一个集合。
listFiles(File directory, String[] extensions,
boolean
recursive)
,这个方法和基于Iterator形式的过滤相同,只是返回的值是一个集合。
⑥资源的转换
※
从URL形式到File形式的转换
File toFile(URL
url)
,这个转换会首先将file://这个Prefix去掉,然后使用normalize方法对路径进行规范。
※
从File形式到URL形式的转换
URL[]
toURLs(File[] files)
,这个转换或对文件的路径加上file://这个prefix,然后对路径进行规范。
发表评论
-
FilenameUtils
2012-12-03 15:22 1094【一】Apache commons IO包之FilenameU ... -
PropertyUtils
2012-11-16 15:29 9101、定义一个二个bean类 (1) 第一个 packag ... -
StringUtils
2012-07-27 20:44 1508org.apache.commons.lang.StringU ... -
ArrayUtils
2012-07-27 20:00 4526org.apache.commons.lang.ArrayUt ... -
BeanUtils
2012-06-20 17:28 1000org.apache.commons.beanutils.Be ... -
ToStringBuilder
2012-06-19 18:14 983一、org.apache.commons.lang.build ...
相关推荐
Apache Commons IO库中的`org.apache.commons.io.FileUtils`类是一个非常实用的工具类,它提供了大量方便、高效的方法,用于处理文件系统操作。这个类在Java开发中被广泛使用,尤其是在处理大量的文件读写和管理任务...
### FileUtils 的方法大全 本文将详细介绍 `FileUtils` 类中提供的各种文件操作方法,这些方法在 Java 开发中非常实用,能够帮助开发者高效地完成文件处理任务。 #### 一、获取系统的临时目录路径 **方法名**: `...
【Java基础】-- FileUtils工具类常用方法 在Java开发中,进行文件操作是必不可少的一部分,Apache Commons IO库提供了一个非常方便的工具类FileUtils,它对Java基础的IO操作进行了封装,使得文件处理更加简洁易用。...
《fileutils-1.0.zip》是一个开源项目,其中包含了用于评级功能的Java Swing组件,具体为`Rating.zip`。这个组件是专为在Swing应用程序中实现用户评分功能而设计的,它允许用户通过图形界面对不同内容进行评级,如...
`FileUtils`是一个方便的工具类,用于简化这些操作。本篇将详细讲解如何利用`FileUtils`实现文件的上传和下载,并介绍如何在Java Web项目中集成和使用这个工具。 首先,`FileUtils`并不是Java标准库的一部分,而是...
FileUtils实现文件下载,下载的文件会显示真是的文件名,下载的文件无论什么格式都不会在页面直接打开
文件工具类FileUtils,对文件中内容行数lines的总数统计
FileUtils.cpp pdal c++
在`FileUtils`这个类中,这些功能通常会被封装成方法,比如`compressFolderTo7z()`和`uncompress7z()`, 以及对应的.zip版本的方法。这些方法应该处理所有必要的错误和异常,以确保文件操作的正确性和安全性。 总的...
,复制单个文件到指定路径,复制整个文件夹到指定路径,复制文件夹下所有文件到指定路径,删除单个文件,删除文件夹下所有文件,删除文件夹以及文件下下所有文件。。。等
收集下JAVA日常开发常用的工具类 包括 文件处理工具:FileUtils 有需要的大家可以下载使用希望能帮到各位
实现文件的创建、删除、复制、压缩、解压以及目录的创建、删除、复制、压缩解压等功能
支持多线程上传下载,支持断点续传功能的一个工具类。
fileutils fileutils具有实用程序功能,可以读取,写入和同步文件。用例写文件: write("/tmp/myfile.txt", std::string_view{"Hello, world!"});将文件同步到存储: sync("/tmp/myfile.txt");读取文件: std::...
fileutils-maven-插件fileutils-maven-plugin 是一个构建插件,用于对文本文件执行一些基本操作。目标概述fileutils-maven-plugin 提供了几个目标。 fileutils-maven-plugin:concatFileList 将文件内容连接到输出...
android File操作工具类 提供了常用的File操作方法
java组件开发(12) IOUtils、FileUtils