fileutilsf.writeliness能写多大的文件

20389人阅读
不重复开发的轮子,既然人家已经写好了通用成熟的工具,与其自己吭哧吭哧写通用类,还不如拿来用即可。但是用归用,不了解还是不行滴,咻咻,
apache下 开源了许多实用的工具类,一般都是在commons包下。
开源的在线文档:
commons.jar 包下载 :
这里讲到了:& &和
。 中文文档奇缺,有知道的童鞋可以吱一声。
1.IOUtils 简要说明
该类为input/output操作提供了通用静态方法。
包括功能:
ocloseQuietly——这些关闭一个流的方法将忽略nulls和例外的情况。
otoXxx /read-这些方法从一个流读取数据。
o write这些方法将数据写到一个流里。
copy——这些方法用于从一个流的所有的数据复制到另一个流。
ocontentEquals——这些方法用于比较两个流的内容。
byte-to-char方法集和char-to-byte方法集都包括一个转换步骤。给出的两种方法集合在每种情况下,一种是使用平台默认的编码方式,另一个允许你指定一个编码。
鼓励你总是指定一个编码因为依靠平台违约会带来意想不到的结果,例如从开发阶段移动到产品部署。
这个类里面所有的方法在读一个流的时候内部是被缓冲的。这意味着我们外部使用的时候就不需要BufferedInputStream或BufferedReader。在测试中默认缓存4 K已被证明是有效。
无论在何处,在这个类里的方法在这堂课里不要冲洗或关闭流。这是为了避免犯不可移植的假设那小溪的来源和进一步使用。因此调用者还需要负责使用后手动关闭流。
-------------------------------------------------------------------------------------------------------------------------------------------------------------
&使用IOUtils来重写原来的读取写入流的操作,代码简洁,没了烦人的try& 以前连基本的操作都要在两个流之间倒来倒去 还要考虑怎么转换,现在一切都是浮云了。
--------------------------------------------------------------------------------------------------------------------------------------------------------------
这边是API的简单介绍:
1.&包括对各种类型输入输出流的关闭。 无条件的关闭流。
byte[] data = &Hello, World&.getBytes();
OutputStream out =
out = new FileOutputStream(&foo.txt&);
out.write(data);
//out.close();//close errors are handled
我们通常的用法,是不太好的。
catch (IOException e) {
// error handling
IOUtils.closeQuietly(out); 以后就直接在finally里关闭流。也不需要判断条件。
从各类输入流中读取数据并转换为字节数组。
toByteArray(参数) 里的参数包括:Reader,InputStream,String,这里String 已经过时,等同于String.getBytes();
toByteArray
public static byte[] (&input,
long&size)
以字节数组的形式来获取inputStream流里的内容,如果在流的大小已知的情况下,可以用此方法来代替默认的toByteArray(InputStream input)方法。
注:该方法会检查size是否可以安全地转换为int,在其正式读到字节数组前。
IOUtils类提供的读操作方法有两大类:第一类是readLines方法。第二类是toXxx方法。
&※ readLines方法
List readLines(InputStream input)
List readLines(InputStream input, String encoding)
readLines(Reader input)
我们知道在字节流中是没有“行”的概念的,但是为什么这里的readLines方法可以接收InputStream呢?看看源代码就知道了
public&static&List&readLines(InputStream&input,&String&encoding)&throws&IOException&{
&&&&&&&&if&(encoding&==&null)&{
&&&&&&&&&&&&return&readLines(input);
&&&&&&&&}&else&{
&&&&&&&&&&&&InputStreamReader&reader&=&new&InputStreamReader(input,&encoding);
&&&&&&&&&&&&return&readLines(reader);
public&static&List&readLines(Reader&input)&throws&IOException&{
&&&&&&&&BufferedReader&reader&=&new&BufferedReader(input);
&&&&&&&&List&list&=&new&ArrayList();
&&&&&&&&String&line&=&reader.readLine();
&&&&&&&&while&(line&!=&null)&{
&&&&&&&&&&&&list.add(line);
&&&&&&&&&&&&line&=&reader.readLine();
&&&&&&&&return&
原来在底层,IOUtils使用了InputStreamReader对input stream进行了包装,到了readLines(Reader)方法内,又再加了一个缓冲。如果我们是直接调用readLines(Reader)方法,为了确保编码正确,需要手工创建一个InputStreamReader并指明encoding,否则将采用默认的encoding。
&※ toXxx方法
IOUtils支持把inputStream中的数据转换成byte[],char[],String对象。而且input stream可以是字节流,字符流。同时可以指定encoding。这些方法实质上是“输出”的过程:即从输入流中读入数据,然后转换为byte[],char[],String,输出到内存中。看看下面的一个源代码:
&&&&public&static&char[]&toCharArray(InputStream&is,&String&encoding)
&&&&&&&&&&&&throws&IOException&{
&&&&&&&&CharArrayWriter&output&=&new&CharArrayWriter();
&&&&&&&&copy(is,&output,&encoding);
&&&&&&&&return&output.toCharArray();
&&&&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);
&&&&public&static&int&copy(Reader&input,&Writer&output)&throws&IOException&{
&&&&&&&&long&count&=&copyLarge(input,&output);
&&&&&&&&if&(count&&&Integer.MAX_VALUE)&{
&&&&&&&&&&&&return&-<span style="color:#;
&&&&&&&&return&(int)&
&&&&public&static&long&copyLarge(Reader&input,&Writer&output)&throws&IOException&{
&&&&&&&&char[]&buffer&=&new&char[DEFAULT_BUFFER_SIZE];
&&&&&&&&long&count&=&<span style="color:#;
&&&&&&&&int&n&=&<span style="color:#;
&&&&&&&&while&(-<span style="color:#&!=&(n&=&input.read(buffer)))&{
&&&&&&&&&&&&output.write(buffer,&<span style="color:#,&n);
&&&&&&&&&&&&count&&#43;=&n;
&&&&&&&&return&
我们可以看到这个过程是没有进行flush的操作的,也就是说使用者必须负责在调用结束后进行缓存清空和输入、输入流关闭。对于input stream是文件的情况,在FileUtils的文件读方法的最后都会调用IOUtils.closeQuietly(in);方法来确保输入流正确关闭。
和读操作一样,IOUtils一样提供了大量的写方法,这些方法可以将byte[],char[],StringBuffer,String,Collection中的数据以字节流,字符流的形式写入到目的源。
&※ writeLines方法
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));
&&&&&&&&&&&&}
public&static&void&writeLines(Collection&lines,&String&lineEnding,
&&&&&&&&&&&&Writer&writer)&throws&IOException&{
&&&&&&&&if&(lines&==&null)&{
&&&&&&&&&&&&return;
&&&&&&&&if&(lineEnding&==&null)&{
&&&&&&&&&&&&lineEnding&=&LINE_SEPARATOR;
&&&&&&&&for&(Iterator&it&=&lines.iterator();&it.hasNext();&)&{
&&&&&&&&&&&&Object&line&=&it.next();
&&&&&&&&&&&&if&(line&!=&null)&{
&&&&&&&&&&&&&&&&writer.write(line.toString());
&&&&&&&&&&&&}
&&&&&&&&&&&&writer.write(lineEnding);
如果我们查看FileUtils,会发现它对所有的文件读写(包括writeLines,writeStringToFile),都是调用字节流&#43;encoding的方式来进行的。因为所有基于字符流的方式最终都需要转换为基于字节流的方式。
我们在从文件等数据源读入数据时,习惯性地以字节读入,到了内存又转换成String对象,最后修改性地以字符写回文件。IOUtils提供了一系列方便的方法来进行这中间的转换。
copy(InputStream input, Writer output, String encoding),这个方法使用指定的encoding,从字节流中读入字节,然后按照encoding解码,通过字符流写回目的源。
copy(Reader input, OutputStream output, String encoding),这个方法从字符流中读取字符,使用指定的encoding编码,通过字节流写回目的源,然后立即清空缓冲。
上面这两个方法底层都调用了一个名为copyLarge的方法,他们分别在通过一个byte[]或者char[]数组对要写回的内容进行缓冲。一次性地从源端读入4K数据然后通过输出流写回。
&&&&public&static&long&copyLarge(InputStream&input,&OutputStream&output)
&&&&&&&&&&&&throws&IOException&{
&&&&&&&&byte[]&buffer&=&new&byte[DEFAULT_BUFFER_SIZE];
&&&&&&&&long&count&=&<span style="color:#;
&&&&&&&&int&n&=&<span style="color:#;
&&&&&&&&while&(-<span style="color:#&!=&(n&=&input.read(buffer)))&{
&&&&&&&&&&&&output.write(buffer,&<span style="color:#,&n);
&&&&&&&&&&&&count&&#43;=&n;
&&&&&&&&return&
&&&&public&static&long&copyLarge(Reader&input,&Writer&output)&throws&IOException&{
&&&&&&&&char[]&buffer&=&new&char[DEFAULT_BUFFER_SIZE];
&&&&&&&&long&count&=&<span style="color:#;
&&&&&&&&int&n&=&<span style="color:#;
&&&&&&&&while&(-<span style="color:#&!=&(n&=&input.read(buffer)))&{
&&&&&&&&&&&&output.write(buffer,&<span style="color:#,&n);
&&&&&&&&&&&&count&&#43;=&n;
&&&&&&&&return&
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:380162次
积分:3777
积分:3777
排名:第9071名
原创:26篇
转载:87篇
评论:52条
(1)(4)(3)(8)(11)(10)(6)(18)(15)(2)(4)(12)(12)(8)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'博客分类:
在项目做到一半或是更多时,发现项目的编码需要转换的话,是一件非常令人头疼的事情,直接改变项目属性中的编码会产生很多的乱码,这里介绍下利用commons-io 实现项目编码的转换,非常简单,希望对你有帮助。
下载commons-io jar包,
文章抄袭了:,原文是讲gbk转换为utf-8的
需求:将原来是utf-8编码格式的项目转换为gbk编码格式的项目
&&&& utf-8项目source目录:D:\\workspace\\GongJiGingSMS\\src
&&&& gbk项目的source目录:D:\\workspace\\GongJiGing\\src
编写程序:
public class ChangEncoding {
public static void main(String[] args) throws IOException {
String uft8Src = "D:\\workspace\\GongJiGingSMS\\src";
String gbkSrc = "D:\\workspace\\GongJiGing\\src";
Collection&File& javaUtf8FileCol =
FileUtils.listFiles(new File(uft8Src), new String[]{"java"}, true);
for (File javaUtf8File : javaUtf8FileCol) {
//GBK格式文件路径
String gbkFilePath = gbkSrc+javaUtf8File.getAbsolutePath().substring(uft8Src.length());
//使用GBK读取数据,然后用UTF-8写入数据
FileUtils.writeLines(new File(gbkFilePath), "GBK", FileUtils.readLines(javaUtf8File, "UTF-8"));
执行这段程序即可,如果是将gbk转换为utf-8或是其他不同类型文件的话,原理相同
chourentang
浏览: 33519 次
来自: 成都
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'&①资源的创建、删除
&※ 目录的创建:&
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),类&#20284;于上面的copyDirectory方法。
copyFileToDirectory(File srcFile, File destDir, boolean preserveFileDate),类&#20284;与上面的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方法,那么这个过程的底层细节是如何的呢?
public&static&String&toString(InputStream&input,&String&encoding)
&&&&&&&&&&&&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&=&<span style="color:#;
&&&&&&&&int&n&=&<span style="color:#;
&&&&&&&&while&(-<span style="color:#&!=&(n&=&input.read(buffer)))&{
&&&&&&&&&&&&output.write(buffer,&<span style="color:#,&n);
&&&&&&&&&&&&count&&#43;=&n;
&&&&&&&&return&
可以看到,Apache commons IO的底层是采用InputStreamReader来读的,而且是连续不断地在内存中构造String对象,如果有一个2G文件,那么将会在内存中构造一个2G的String对象。
&※ 写入文件
void writeLines(File file, String encoding, Collection lines, String lineEnding),这个用法用于将内存中一个集合的内容持久化到本地文件,以行的方式写入每一个集合元素。可以指定编码和换行符。
这个方法的适用场景类&#20284;于:将内存中的一批“客户信息集合”导出到文件中
public&static&void&writeLines(File&file,&String&encoding,&Collection&lines,&String&lineEnding)&throws&IOException&{
&&&&&&&&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),这个方法将字符串一次性写入文件
public&static&void&write(String&data,&OutputStream&output,&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&input1&=&null;
&&&&&&&&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&(-<span style="color:#&!=&ch)&{
&&&&&&&&&&&&int&ch2&=&input2.read();
&&&&&&&&&&&&if&(ch&!=&ch2)&{
&&&&&&&&&&&&&&&&return&false;
&&&&&&&&&&&&}
&&&&&&&&&&&&ch&=&input1.read();
&&&&&&&&int&ch2&=&input2.read();
&&&&&&&&return&(ch2&==&-<span style="color:#);
⑤资源的过滤
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形式的过滤相同,只是返回的&#20540;是一个集合。
listFiles(File directory, String[] extensions, boolean recursive),这个方法和基于Iterator形式的过滤相同,只是返回的&#20540;是一个集合。
⑥资源的转换
从URL形式到File形式的转换
File toFile(URL url),这个转换会首先将file://这个Prefix去掉,然后使用normalize方法对路径进行规范。
从File形式到URL形式的转换
URL[] toURLs(File[] files),这个转换或对文件的路径加上file://这个prefix,然后对路径进行规范。
本文已收录于以下专栏:
相关文章推荐
File src = new File(&G:/2012/portal/login.jsp&);
File tar = new File(&G:/2012/portal/loginZs.jsp&);
mons.io.FileUtils快速读写文件
String fileName = &C://11.txt&;
&#160;&#160;File file = new ...
mons.io.FileUtils快速读写文件
String fileName = &C://11.txt&;
&#160;&#160;File file = new File...
1、错误描述
警告: Could not create JarEntryRevision for [jar:file:/D:/MyEclipse/apache-tomcat-7.0.53/webapp...
Java IO流学习总结七:Commons IO 2.5
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/
Commons IO简介
Apache Commons IO是Apache基金会创建并维护的Java函数库。它提供了许多类使得开发者的常见任务变得简单,同时减少重复代码,这些代码可能遍布于每个独立的...
利用 mons.io.FileUtils快速读写文件
http://php.11519.net/5jblog/?p=475
&#160; String
fileNam...
mons.io.FileUtils快速读写文件
http://php.11519.net/5jblog/?p=475
String fileName = &C:...
利用 mons.io.FileUtils快速读写文件
&#160; String
fileName = &C://11.txt&;
&#160;&#160;File file =...
利用 mons.io.FileUtils快速读写文件
http://php.11519.net/5jblog/?p=475
&#160; String
fileNam...
他的最新文章
讲师:刘文志
讲师:陈伟
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)下次自动登录
现在的位置:
& 综合 & 正文
使用FILEUTILS读写文件
FILEUTILS补足了JAVA读写文件的弱势,其用法如下:
1. 读取文件
1)如果是按行分隔的文件,可以用行迭代器:
LineIterator it = FileUtils.lineIterator(file, "UTF-8");
while (it.hasNext()) {
String line = it.nextLine();
/// 进行处理
} finally {
LineIterator.closeQuietly(iterator);
也可以直接一次性获取所有的行
File file = new File("/commons/io/project.properties");
List lines = FileUtils.readLines(file, "UTF-8");
JDK7也提供了类似的机制,
List&String& lines=Files.readAllLines(Paths.get("/tmp/test.csv"), Charset.forName("UTF-8"));
for(String line:lines){
System.out.println(line);
2) 一次性读取文件到String
String contents=FileUtils.readFileToString(file, "UTF-8);
FileUtils.write(file, 内容, "UTF-8");
JDK7也有类似的机制,如:
BufferedWriter writer =
Files.newBufferedWriter( path, Charset.defaultCharset(),
StandardOpenOption.CREATE);
writer.write(content,
0, content.length());
&&&&推荐文章:
【上篇】【下篇】

我要回帖

更多关于 fileutils.writelines 的文章

 

随机推荐