Java IO流学习总结七:Commons IO 2.5-FileUtils

Java IO流学习总结七:Commons IO 2.5-FileUtilsJavaIO流学习总结七:CommonsIO2.5转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54946762本文出自【赵彦军的博客】在上面的几篇文章中,介绍了IO的常规用法,今天介绍CommonsIO框架的使用。CommonsIO简介ApacheCommonsIO是Apache基金会创建并维护的Ja

大家好,又见面了,我是你们的朋友全栈君。

Java IO流学习总结七:Commons IO 2.5-FileUtils

转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54972773
本文出自【赵彦军的博客】

Java IO流学习总结一:输入输出流
Java IO流学习总结二:File
Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream
Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter
Java IO流学习总结五:转换流-InputStreamReader、OutputStreamWriter
Java IO流学习总结六:ByteArrayInputStream、ByteArrayOutputStream
Java IO流学习总结七:Commons IO 2.5-FileUtils

2021年 Java Okio-更加高效易用的IO库

在上面的几篇文章中,介绍了IO的常规用法,今天介绍Commons IO框架的使用。

Commons IO简介

Apache Commons IO是Apache基金会创建并维护的Java函数库。它提供了许多类使得开发者的常见任务变得简单,同时减少重复代码,这些代码可能遍布于每个独立的项目中,你却不得不重复的编写。这些类由经验丰富的开发者维护,对各种问题的边界条件考虑周到,并持续修复相关bug。最新版本2.5

下载地址:http://commons.apache.org/proper/commons-io/download_io.cgi

这里写图片描述

福利

另外我已经把Commons IO 2.5的源码发布到Jcenter,大家就不用下载jar包了,可以直接引用。

  • Maven引用
<dependency>
  <groupId>org.apache.commons.io</groupId>
  <artifactId>commonsIO</artifactId>
  <version>2.5.0</version>
  <type>pom</type>
</dependency>
  • Gradle引用
compile 'org.apache.commons.io:commonsIO:2.5.0'

FileUtils 文件操作工具类

  • 复制文件夹
//复制文件夹(文件夹里面的文件内容也会复制),file1和file2平级。
//参数1:文件夹; 参数2:文件夹
void copyDirectory( file1 , file2 );  

//复制文件夹到另一个文件夹。 file1是file2的子文件夹.
//参数1:文件夹; 参数2:文件夹
void copyDirectoryToDirectory( file1 , file2 );

//复制文件夹,带有文件过滤功能
void copyDirectory(File srcDir, File destDir, FileFilter filter)

  • 复制文件
void copyFile(final File srcFile, final File destFile) //复制文件到另外一个文件

void long copyFile(final File input, final OutputStream output) //复制文件到输出流

void copyFileToDirectory( file1 , file2)  //复制文件到一个指定的目录

//把输入流里面的内容复制到指定文件
void copyInputStreamToFile( InputStream source, File destination)

//把URL 里面内容复制到文件。可以下载文件。
//参数1:URL资源 ; 参数2:目标文件
void copyURLToFile(final URL source, final File destination)

//把URL 里面内容复制到文件。可以下载文件。
//参数1:URL资源 ; 参数2:目标文件;参数3:http连接超时时间 ; 参数4:读取超时时间
void copyURLToFile(final URL source, final File destination,
                                     final int connectionTimeout, final int readTimeout)
                                     

实战演练

  • 复制文件夹
package com.app;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import org.apache.commons.io.FileUtils;

public class A1 { 
   

	public static void main(String[] args) { 
   
		String filePath1 = "F:/dd" ;
		File file1 = new File( filePath1 ) ;
		
		String filePath2 = "F:/ee" ;
		File file2 = new File( filePath2 ) ;
		
		try { 
   
		    //复制文件夹
			FileUtils.copyDirectory( file1 , file2 );
		} catch (IOException e) { 
   
			e.printStackTrace();
		}
		
	}

  • 复制文件
String filePath1 = "F:/123.gif" ;
String filePath2 = "F:/abc.gif" ;
		
File file1 = new File( filePath1 ) ;
File file2 = new File( filePath2 ) ;

//复制文件 
FileUtils.copyFile( file1 , file2);
  • 下载文件 copyURLToFile(final URL source, final File destination)
package com.app;

import java.io.File;
import java.io.IOException;
import java.net.URL;

import org.apache.commons.io.FileUtils;

public class A8 { 
   

	public static void main(String[] args) { 
   
		String url = "http://imgsrc.baidu.com/baike/pic/item/7aec54e736d12f2ee289bffe4cc2d5628435689b.jpg" ;

		String filePath2 = "F:/abc.jpg" ;
		File file2 = new File( filePath2 ) ;

		try { 
   

			//把服务器上图片下载到本地F盘的abc.jpg图片
			FileUtils.copyURLToFile( new URL( url ) , file2 );

		} catch (IOException e) { 
   
			e.printStackTrace();
		}
	}
}

  • 把字符串写入文件
void writeStringToFile(final File file, final String data, final String encoding)

//参数1:需要写入的文件,如果文件不存在,将自动创建。 参数2:需要写入的内容
//参数3:编码格式 参数4:是否为追加模式( ture: 追加模式,把字符串追加到原内容后面)
void writeStringToFile(final File file, final String data, final Charset encoding, final boolean
            append)

小例子

 package com.app;

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;

public class A8 { 
   

	public static void main(String[] args) { 
   
		String mes = "下班了" ;

		String filePath2 = "F:/abc.xml" ;
		File file2 = new File( filePath2 ) ;

		try { 
   
			FileUtils.writeStringToFile( file2 , mes , "UTF-8" , true ); 
		}catch (IOException e) { 
   
			e.printStackTrace();
		}
	}
}


  • 把字节数组写入文件
//File:目标文件
//byte[]: 字节数组
//boolean append : 是否为追加模式
//final int off: 数组开始写入的位置 ; final int len :写入的长度

void writeByteArrayToFile(final File file, final byte[] data)

void writeByteArrayToFile(final File file, final byte[] data, final boolean append)

void writeByteArrayToFile(final File file, final byte[] data, final int off, final int len)

void writeByteArrayToFile(final File file, final byte[] data, final int off, final int len,
                                            final boolean append)

小例子

package com.app;

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;

public class A8 { 
   

	public static void main(String[] args) { 
   
		String mes = "哈哈,下班了" ;

		String filePath2 = "F:/abc.txt" ;
		File file2 = new File( filePath2 ) ;

		try { 
   
			byte[] mesArray = mes.getBytes() ;
			FileUtils.writeByteArrayToFile( file2 , mesArray );
		}catch (IOException e) { 
   
			e.printStackTrace();
		}
	}
}


  • 把集合里面的内容写入文件
//File file: 目标文件
//Collection<?> lines: 内容集合
//boolean append : 是否为追加模式
//String encoding : 编码方式,比如"UTF-8" 
//String lineEnding : 每一行以什么结尾
void writeLines(final File file, final Collection<?> lines)

void writeLines(final File file, final Collection<?> lines, final boolean append)

void writeLines(final File file, final String encoding, final Collection<?> lines)

void writeLines(final File file, final String encoding, final Collection<?> lines,
                                  final boolean append)
                                  
void writeLines(final File file, final String encoding, final Collection<?> lines,
                                  final String lineEnding)

void writeLines(final File file, final String encoding, final Collection<?> lines,
                                  final String lineEnding, final boolean append)

void writeLines(final File file, final Collection<?> lines, final String lineEnding)

void writeLines(final File file, final Collection<?> lines, final String lineEnding,
                                  final boolean append)

小例子1

package com.app;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import org.apache.commons.io.FileUtils;

public class A8 { 
   

	public static void main(String[] args) { 
   
		
		ArrayList<String> list = new ArrayList<>() ;
		
		String mes = "哈哈,下班了" ;
		String mes2 = "回家,回家" ;
		
		list.add( mes ) ;  //第一行数据
		list.add( mes2 ) ; //第二行数据

		String filePath2 = "F:/abc.txt" ;
		File file2 = new File( filePath2 ) ;

		try { 
   
			FileUtils.writeLines( file2 , list );
		}catch (IOException e) { 
   
			e.printStackTrace();
		}
	}
}


结果:
这里写图片描述

小例子2

package com.app;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import org.apache.commons.io.FileUtils;

public class A8 { 
   

	public static void main(String[] args) { 
   
		
		ArrayList<String> list = new ArrayList<>() ;
		
		String mes = "哈哈,下班了" ;
		String mes2 = "回家,回家" ;
		
		list.add( mes ) ;
		list.add( mes2 ) ;

		String filePath2 = "F:/abc.txt" ;
		File file2 = new File( filePath2 ) ;

		try { 
   
			//每一行以。结尾
			FileUtils.writeLines( file2 , list, "。");
		}catch (IOException e) { 
   
			e.printStackTrace();
		}
	}
}


结果:

这里写图片描述

  • 往文件里面写内容
/** * 参数解释 * File file:目标文件 * CharSequence data : 要写入的内容 * Charset encoding;String encoding : 编码格式 * boolean append:是否为追加模式 */

void write(final File file, final CharSequence data, final Charset encoding)

void write(final File file, final CharSequence data, final String encoding)

void write(final File file, final CharSequence data, final Charset encoding, final boolean append)

void write(final File file, final CharSequence data, final String encoding, final boolean append)

小例子

package com.app;
import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;

public class A8 { 
   

	public static void main(String[] args) { 
   
			
		String mes = "哈哈,下班了" ;
		
		String filePath2 = "F:/abc.txt" ;
		File file2 = new File( filePath2 ) ;

		try { 
   
			FileUtils.write( file2 , mes , "utf-8" ,true );
		}catch (IOException e) { 
   
			e.printStackTrace();
		}
	}
}


  • 文件移动
//文件夹移动,文件夹在内的所有文件都将移动 
void moveDirectory(final File srcDir, final File destDir)

//文件夹移动到另外一个文件内部。boolean createDestDir:如果destDir文件夹不存在,是否要创建一个
void moveDirectoryToDirectory(final File src, final File destDir, final boolean createDestDir)

//移动文件
void moveFile(final File srcFile, final File destFile)

//把文件移动到另外一个文件内部。boolean createDestDir:如果destDir文件夹不存在,是否要创建一个
void moveFileToDirectory(final File srcFile, final File destDir, final boolean createDestDir)

//移动文件或者目录到指定的文件夹内。
//boolean createDestDir:如果destDir文件夹不存在,是否要创建一个
void moveToDirectory(final File src, final File destDir, final boolean createDestDir)

  • 清空和删除文件夹
//删除一个文件夹,包括文件夹和文件夹里面所有的文件
void deleteDirectory(final File directory)

//清空一个文件夹里面的所有的内容
void cleanDirectory(final File directory)

//删除一个文件,会抛出异常
//如果file是文件夹,就删除文件夹及文件夹里面所有的内容。如果file是文件,就删除。
//如果某个文件/文件夹由于某些原因无法被删除,会抛出异常
void forceDelete(final File file)  

//删除一个文件,没有任何异常抛出
//如果file是文件夹,就删除文件夹及文件夹里面所有的内容。如果file是文件,就删除。
//如果某个文件/文件夹由于某些原因无法被删除,不会抛出任何异常
boolean deleteQuietly(final File file) 

  • 创建文件夹
//创建一个文件夹,如果由于某些原因导致不能创建,则抛出异常
//一次可以创建单级或者多级目录
void forceMkdir(final File directory)

//创建文件的父级目录
void forceMkdirParent(final File file)

小例子1

package com.app;
import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;

public class A8 { 
   

	public static void main(String[] args) { 
   
			
		String filePath = "F:/123/abc/abc.txt" ;
		File file = new File( filePath ) ;
		
		try { 
   
			//一次可以创建单级或者多级目录
			FileUtils.forceMkdir(file);
		}catch (IOException e) { 
   
			e.printStackTrace();
		}
	}
}


效果图:
这里写图片描述

小例子1

package com.app;
import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;

public class A8 { 
   

	public static void main(String[] args) { 
   
			
		String filePath = "F:/123/abc/abc.txt" ;
		File file = new File( filePath ) ;
		
		try { 
   
		//创建文件的父级目录
		FileUtils.forceMkdirParent(file);
		}catch (IOException e) { 
   
			e.printStackTrace();
		}
	}
}


效果:
这里写图片描述

  • 文件获取输入/输出流
//获取输入流
FileInputStream openInputStream(final File file)

//获取输出流
FileOutputStream openOutputStream(final File file)

  • 读取文件
//把文件读取到字节数组里面
byte[] readFileToByteArray(final File file)

//把文件读取成字符串 ;Charset encoding:编码格式
String readFileToString(final File file, final Charset encoding)

//把文件读取成字符串 ;String encoding:编码格式
String readFileToString(final File file, final String encoding)

//把文件读取成字符串集合 ;Charset encoding:编码格式
List<String> readLines(final File file, final Charset encoding)

//把文件读取成字符串集合 ;String encoding:编码格式
List<String> readLines(final File file, final String encoding)

  • 测试两个文件的修改时间那个比较新/老
//判断file文件的修改是否比reference文件新
boolean isFileNewer(final File file, final File reference) 

//判断file文件的修改是否比 date日期新
boolean isFileNewer(final File file, final Date date)

//判断file文件的修改是否比 timeMillis 毫秒值新
boolean isFileNewer(final File file, final long timeMillis) 

//判断file文件的修改是否比reference文件老
boolean isFileOlder(final File file, final File reference)

//判断file文件的修改是否比 date日期老
boolean isFileOlder(final File file, final Date date)

//判断file文件的修改是否比 timeMillis 毫秒值老
boolean isFileOlder(final File file, final long timeMillis)
  • 其他
//判断文件夹内是否包含某个文件或者文件夹
boolean directoryContains(final File directory, final File child)

//获取文件或者文件夹的大小
long sizeOf(final File file) 

//获取临时目录文件
File getTempDirectory()

//获取临时目录路径
String getTempDirectoryPath() 

//获取用户目录文件 
File getUserDirectory()

//获取用户目录路径 
static String getUserDirectoryPath()

//如果不存在,新建文件或者创建单级目录或者多级目录 
//如果存在,修改文件修改时间 
void touch(final File file)

//比较两个文件内容是否相同
boolean contentEquals(final File file1, final File file2)

小例子

package com.app;
import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;

public class A8 { 
   

	public static void main(String[] args) { 
   
			
		String filePath = "F:/123" ;
		File file = new File( filePath ) ;
		
		File child = new File("F:/123/abc/123.txt") ;
		
		try { 
   
			boolean hasChild = FileUtils.directoryContains( file , child) ;
			System.out.println( hasChild );
		}catch (IOException e) { 
   
			e.printStackTrace();
		}
	}
}


效果图
这里写图片描述


个人微信号:zhaoyanjun125 , 欢迎关注

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C4nDblzT-1599192189448)(http://o7rvuansr.bkt.clouddn.com/weixin200.jpg)]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145114.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python 标识符详解[学习 Python 必备基础知识][看此一篇就够了]「建议收藏」

    Python 标识符详解[学习 Python 必备基础知识][看此一篇就够了]「建议收藏」标识符就是一个名字,它的主要作用就是作为变量、函数、类、模块以及其他对象的名称。就好像我们人一样,需要起个名字,便于称呼、指代。在给标识符命名的时候还要尽量做到“见名知其意”,例如`book_name`我们看到之后,就能大概猜出是“书的名字”相关的内容;`user_name`我们看到之后,能大概猜出是“用户名字”相关的内容等等。

    2022年9月9日
    2
  • Java中的构造方法[通俗易懂]

    Java中的构造方法[通俗易懂]简述前言:【08-10】构造方法   定义:就是类构造对象时调用的方法,主要用来实例化对象。构造方法分为无参构造方法、有参构造方法。   概念:构方法是一种特殊的“成员方法”     1,构造方法作用:(1)构造出来一个类的实例(2)对构造出来个一个类的实例(对象)初始化     2,构造方法的名字必须与定义他的类名完全相同,没有返回类型,甚至连void也没有 …

    2022年7月8日
    23
  • js刷新当前页面方法「建议收藏」

    js刷新当前页面方法「建议收藏」js刷新当前页面js刷新当前页面在写JS代码时,用到JS来刷新当前页面的方法有几种,比如最常用的reload(),location等reload方法,该方法强迫浏览器刷新当前页面。语法:location.reload([bForceGet])参数:bForceGet,可选参数,默认为false,从客户端缓存里取当前页。true,则以GET方式,从服务端取最新的页面,相当于客户端点击F5(“刷新”)replace方法,该方法通过指定URL替换当前缓存在历史里(客

    2025年7月24日
    3
  • 想要复制网页的文字网页不让复制_如何复制文字

    想要复制网页的文字网页不让复制_如何复制文字作者:iamlaosong当我们需要复制网页上的内容时,往往会碰到不能复制的情况,面对这个问题,不同的情况有不同的应对方法,比如禁止JavaScript运行,查看源代码,另存为网页文件等。这些方法也可以用,现在有个更通用的办法是QQ屏幕截图所带的功能,不管网页用的什么技术,能看见就可以复制,特别适合不太懂技术的人。要用QQ截图功能,QQ肯定是要登录的,然后用浏览器打开需要复制文字的网页,按QQ屏幕截图快捷键Ctrl+Alt+A选择需要复制文字的区域,在弹出的菜单中点击“翻译”或者“屏幕识图”两个按钮

    2022年10月12日
    1
  • feiler包(prim算法)

    背景Weisfeiler-Lehman算法(威斯费勒-莱曼算法)是测试图同构的经典算法之一,我在这儿记录一下它的实现原理,参考文章为Weisfeiler-LehmanGraphKernels伪代码论文中的伪代码如下所示假设要测试同构的两张图为G和G`,那么在结点v的第i次迭代里,算法都分别做了四步处理:标签复合集定义、复合集排序、标签压缩和重标签。标签复合集定义如果是第一次迭代,v的标签复合集里只有一个元素,就是v的标签。如果不是第一次迭代,v的标签复合集元素就是v的..

    2022年4月10日
    63
  • minicom指令_Minicom 使用初步

    minicom指令_Minicom 使用初步因为现在电脑基本不配备串行接口,所以,usb转串口成为硬件调试时的必然选择。目前知道的,PL2303的驱动是有的,在dev下的名称是ttyUSB#。minicom,tkterm都是linux下应用比较广泛的串口软件,这里简单介绍minicom使用。一,安装debian系,比如ubuntu、mint等:sudoapt-getinstallminicom二,配置首先,查看串口设备是否可用。l…

    2022年4月29日
    194

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号