使⽤apache的FileUtils处理⽂件的复制等操作⽅式
平时对⼀些⽂件进⾏操作,⽐如说写⽂件,读⽂件,复制⼀个⽂件等,使⽤原⽣File操作需要读取源⽂件,⽣成流对象,再写⼊⼀个新的⽂件中⼀系列过程,使⽤apache commons-io帮我们封装了这些实现,有些操作可以很容易的使⽤它的api来实现。
这⾥使⽤2.6版本,javadoc参照
1、pom依赖加⼊commons-io
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
2、常⽤API使⽤
2.1 获取⽂件
File fileA = File(testPath + "a.txt");
// 最终路径为⼊参拼接起来即testPath + "a.txt"
File fileAA = File(testPath, "a.txt");
// 获取某个⽬录下的⽂件,后⾯参数是拼接⽽成的
File fileAAA = File(new File(testPath), "a.txt");
2.2 获取临时⽬录和⽤户⽬录
// 获取临时⽬录路径
// 每种操作系统有所不同,Windows⼀般是C:\DOCUME~1\⽤户~1\LOCALS~1\Temp,Solaris⼀般是:/var/tmp/,Linux和Mac OS X⼀般是:/tmp
// Windows的pdir属性值可以看环境变量->⽤户变量中的TMP。
File tempDirectory = TempDirectory();
String tempDirectoryPath = TempDirectoryPath();
File userDirectory = UserDirectory();
String userDirectoryPath = UserDirectoryPath();
System.out.println(tempDirectoryPath + " - " + tempDirectory);
System.out.println(userDirectoryPath + " - " + Name());
2.3 创建⽂件
// 创建⽂件(实现与Unix上“ touch”实⽤程序相同的⾏为。它会创建⼀个⼤⼩为0的新⽂件,或者如果⽂件已经存在,则将其打开和关闭⽽不进⾏修改,⽽是更新⽂件的⽇期和时间。) File fileD = new File(testPath + "d.txt");
2.4 写内容到⽂件
// 写⽂件
File fileB = new File(testPath + "b.txt");
if (!ists()) {
}
// 通过字节写⼊⽂件
FileUtils.writeByteArrayToFile(fileB, "Hello, smile".getBytes());
FileUtils.writeByteArrayToFile(fileB, "Hello, sunshine".getBytes(), true);
// 通过⾏写⼊⽂件(覆盖)
FileUtils.writeLines(fileB, wArrayList("春夏秋冬, 三餐四季,只愿有你"));
// 通过⾏写⼊⽂件(追加)
FileUtils.writeLines(fileB, wArrayList("春风很柔,夏风很烈,秋风清爽,东风凛冽,你就是春夏秋冬的风"), true);
// 字符串写⼊,不换⾏追加
FileUtils.writeStringToFile(fileB, "唯美有你", "UTF-8", true);
FileUtils.writeStringToFile(fileB, "哪⾥有你", Charset.defaultCharset(), true);
File fileC = new File(testPath + "c.txt");
if (!ists()) {
}
// 流操作
fileInputStream = FileUtils.openInputStream(fileB);
// fileOutputStream = FileUtils.openOutputStream(fileC);
fileOutputStream = FileUtils.openOutputStream(fileC, true);
/
/ 字节数组
byte[] buffer = new byte[1024];
// 将⽂件内容写到⽂件中
while (ad(buffer) != -1) {
fileOutputStream.write(buffer);
}
2.5 读取⽂件内容
// 按⾏读取⽂件内容
List list = adLines(fileAAA, "UTF-8");
System.out.println(list.size() > 0 ? (0) : "" + list.size());
List<String> lines = adLines(fileB, Charset.defaultCharset());
System.out.println(lines.size() > 0 ? (0) : "" + lines.size());
// 读取⽂件内容为字节
byte[] bytes = adFileToByteArray(fileB);
System.out.println(new String(bytes));
// 读取⽂件为String
String fileToString = adFileToString(fileB, "UTF-8");
System.out.println(fileToString);
String fileToString2 = adFileToString(fileB, Charset.defaultCharset());
System.out.println(fileToString2);
2.6 获取⽬录⽂件及⽬录
// recursive是否递归查询,这⾥查询.txt⽂件,也可以指定其他格式的,如果extensions为null则查询所有类型的⽂件
Collection<File> listFiles = FileUtils.listFiles(new File(testPath), null, true);
Collection<File> listFiles2 = FileUtils.listFiles(new File(testPath), new String[]{"txt"}, true);
// 获取某个⽬录下的所有⽂件 TrueFileFilter.INSTANCE表⽰匹配所有的
Collection<File> files1 = FileUtils.listFiles(new File(testPath), TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
// 获取某个⽬录下的所有⽂件和⽂件⽬录 TrueFileFilter.INSTANCE表⽰匹配所有的
writelines()方法将什么写入文件Collection<File> files2 = FileUtils.listFilesAndDirs(new File(testPath), TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
2.7 ⽂件内容⽐较
// ⽂件内容⽐较
boolean aa = tEquals(fileA, fileAA);
boolean ab = tEquals(fileA, fileB);
2.8 ⽂件或⽬录拷贝
// ⽂件复制,将⽂件A的内容复制给⽂件D
// 把⽂件复制到某个⽬录下
// 把某个⽬录拷贝到另外⼀个⽬录
// 把⽂件或⽬录拷贝到指定⽬录
// ⽂件⽬录复制
2.9 ⽂件或⽬录删除
// 删除⽬录
FileUtils.deleteDirectory(new File(testPath + "first"));
// 删除⽂件或⽬录
FileUtils.deleteQuietly(fileD);
FileUtils.deleteQuietly(new File(testPath + "first"));
这就是FileUtils⼯具类的⼀些常⽤操作API使⽤。
apache commons-io的pyFile简单地复制⽂件
⼀般的⽅法,我们要复制⼀个⽂件,可能需要读取源⽂件,⽣成流对象,再写⼊⼀个新的⽂件中,使⽤apache commons-io很容就可以处理⽂件的复制。
下⾯的例⼦演⽰我们怎样使⽤pyFile⽅法在同⼀个⽂件夹复制⽂件和使⽤pyFileToDirectory⽅法复制到指定的⽂件夹中。其中Property("pdir")
为通过JVM读取pdir属性取得临时⽂件夹,每种操作系统有所不同,Windows⼀般是
C:\DOCUME~1\⽤户~1\LOCALS~1\Temp,Solaris⼀般是:/var/tmp/,Linux和Mac OS X⼀般是:/tmp,Windows的pdir属性值可以看环境变量->⽤户变量中的TMP。
当然我们⼀般使⽤的是绝对或相对路径,如要复制到F:\ajava⽬录中,我们只需将targetDir改成File targetDir = new File("F:\\ajava");运⾏后就可以看到结果。
package ajava.sample.apache;
import java.io.File;
import java.io.IOException;
import org.apachemons.io.FileUtils;
public class AjavaFileCopyExample {
public static void main(String[] args)
{
// 源File对象
File source = new File("");
// 备份的File对象
File target = new File("");
//通过JVM读取pdir属性取得临时⽂件夹
File targetDir = new Property("pdir"));
try
{
//在同⼀个⽂件夹复制⽂件
System.out.println("复制 " + source + " ⽂件到 " + target);
/
/ 根据指定的⽂件夹复制
System.out.println("复制 " + source + " ⽂件到" + targetDir + "⽬录");
} catch (IOException e)
{
// Errors will be reported here if any error occures during copying
// the file
e.printStackTrace();
}
}
}
输出结果为:
复制 ⽂件到
复制 ⽂件到C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp⽬录再查看对应的⽂件夹,就可以发现备份⽂件。
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论