本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
使用apache 的FileUtils处理文件的复制等操作方式
lizhuang236 · 183浏览 · 发布于2021-07-23 +关注

这篇文章主要介绍了使用apache 的FileUtils处理文件的复制等操作方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

平时对一些文件进行操作,比如说写文件,读文件,复制一个文件等,使用原生File操作需要读取源文件,生成流对象,再写入一个新的文件中一系列过程,使用apache commons-io帮我们封装了这些实现,有些操作可以很容易的使用它的api来实现。

这里使用2.6版本,javadoc参照commons-io-2.6

1、pom依赖加入commons-io

1

2

3

4

5

<dependency>

    <groupId>commons-io</groupId>

    <artifactId>commons-io</artifactId>

    <version>2.6</version>

</dependency>

2、常用API使用

2.1 获取文件

1

2

3

4

5

File fileA = FileUtils.getFile(testPath + "a.txt");

// 最终路径为入参拼接起来即testPath + "a.txt"

File fileAA = FileUtils.getFile(testPath, "a.txt");

// 获取某个目录下的文件,后面参数是拼接而成的

File fileAAA = FileUtils.getFile(new File(testPath), "a.txt");

2.2 获取临时目录和用户目录

1

2

3

4

5

6

7

8

9

// 获取临时目录路径

// 每种操作系统有所不同,Windows一般是C:\DOCUME~1\用户~1\LOCALS~1\Temp,Solaris一般是:/var/tmp/,Linux和Mac OS X一般是:/tmp

// Windows的java.io.tmpdir属性值可以看环境变量->用户变量中的TMP。

File tempDirectory = FileUtils.getTempDirectory();

String tempDirectoryPath = FileUtils.getTempDirectoryPath();

File userDirectory = FileUtils.getUserDirectory();

String userDirectoryPath = FileUtils.getUserDirectoryPath();

System.out.println(tempDirectoryPath + "  -  " + tempDirectory);

System.out.println(userDirectoryPath + "  -  " + userDirectory.getName());

2.3 创建文件

1

2

3

// 创建文件(实现与Unix上“ touch”实用程序相同的行为。它会创建一个大小为0的新文件,或者如果文件已经存在,则将其打开和关闭而不进行修改,而是更新文件的日期和时间。)

File fileD = new File(testPath + "d.txt");

FileUtils.touch(fileD);

2.4 写内容到文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

// 写文件

File fileB = new File(testPath + "b.txt");

if (!fileB.exists()) {

    fileB.createNewFile();

}

// 通过字节写入文件

FileUtils.writeByteArrayToFile(fileB, "Hello, smile".getBytes());

FileUtils.writeByteArrayToFile(fileB, "Hello, sunshine".getBytes(), true);

// 通过行写入文件(覆盖)

FileUtils.writeLines(fileB, Lists.newArrayList("春夏秋冬, 三餐四季,只愿有你"));

// 通过行写入文件(追加)

FileUtils.writeLines(fileB, Lists.newArrayList("春风很柔,夏风很烈,秋风清爽,东风凛冽,你就是春夏秋冬的风"), true);

// 字符串写入,不换行追加

FileUtils.writeStringToFile(fileB, "唯美有你", "UTF-8", true);

FileUtils.writeStringToFile(fileB, "哪里有你", Charset.defaultCharset(), true);

File fileC = new File(testPath + "c.txt");

if (!fileC.exists()) {

    fileC.createNewFile();

}

//  流操作

fileInputStream   = FileUtils.openInputStream(fileB);

//  fileOutputStream = FileUtils.openOutputStream(fileC);

fileOutputStream = FileUtils.openOutputStream(fileC, true);

// 字节数组

byte[] buffer = new byte[1024];

// 将文件内容写到文件中

while (fileInputStream.read(buffer) != -1) {

    fileOutputStream.write(buffer);

}

2.5 读取文件内容

1

2

3

4

5

6

7

8

9

10

11

12

13

// 按行读取文件内容

List list = FileUtils.readLines(fileAAA, "UTF-8");

System.out.println(list.size() > 0 ? list.get(0) : "" + list.size());

List<String> lines = FileUtils.readLines(fileB, Charset.defaultCharset());

System.out.println(lines.size() > 0 ? lines.get(0) : "" + lines.size());

// 读取文件内容为字节

byte[] bytes = FileUtils.readFileToByteArray(fileB);

System.out.println(new String(bytes));

// 读取文件为String

String fileToString = FileUtils.readFileToString(fileB, "UTF-8");

System.out.println(fileToString);

String fileToString2 = FileUtils.readFileToString(fileB, Charset.defaultCharset());

System.out.println(fileToString2);

2.6 获取目录文件及目录

1

2

3

4

5

6

7

// 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表示匹配所有的

Collection<File> files2 = FileUtils.listFilesAndDirs(new File(testPath), TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);

2.7 文件内容比较

1

2

3

// 文件内容比较

boolean aa = FileUtils.contentEquals(fileA, fileAA);

boolean ab = FileUtils.contentEquals(fileA, fileB);

2.8 文件或目录拷贝

1

2

3

4

5

6

7

8

9

10

// 文件复制,将文件A的内容复制给文件D

FileUtils.copyFile(fileA, fileD);

// 把文件复制到某个目录下

FileUtils.copyFileToDirectory(fileD, new File(testPath + "inner"));

// 把某个目录拷贝到另外一个目录

FileUtils.copyDirectoryToDirectory(new File(testPath + "inner"), new File(testPath + "other"));

// 把文件或目录拷贝到指定目录

FileUtils.copyToDirectory(fileB, new File(testPath + "inner"));

// 文件目录复制

FileUtils.copyDirectory(new File(testPath + "inner"), new File(testPath + "first"));

2.9 文件或目录删除

1

2

3

4

5

// 删除目录

FileUtils.deleteDirectory(new File(testPath + "first"));

// 删除文件或目录

FileUtils.deleteQuietly(fileD);

FileUtils.deleteQuietly(new File(testPath + "first"));

这就是FileUtils工具类的一些常用操作API使用。


apache commons-io的FileUtils.copyFile简单地复制文件

一般的方法,我们要复制一个文件,可能需要读取源文件,生成流对象,再写入一个新的文件中,使用apache commons-io很容就可以处理文件的复制。

下面的例子演示我们怎样使用FileUtils.copyFile方法在同一个文件夹复制文件和使用FileUtils.copyFileToDirectory方法复制到指定的文件夹中。其中System.getProperty("java.io.tmpdir")为通过JVM读取java.io.tmpdir属性取得临时文件夹,每种操作系统有所不同,Windows一般是C:\DOCUME~1\用户~1\LOCALS~1\Temp,Solaris一般是:/var/tmp/,Linux和Mac OS X一般是:/tmp,Windows的java.io.tmpdir属性值可以看环境变量->用户变量中的TMP。

当然我们一般使用的是绝对或相对路径,如要复制到F:\ajava目录中,我们只需将targetDir改成File targetDir = new File("F:\\ajava");运行后就可以看到结果。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

package ajava.sample.apache;

import java.io.File;

import java.io.IOException;

import org.apache.commons.io.FileUtils;

public class AjavaFileCopyExample {

       public static void main(String[] args)

       {

               // 源File对象

               File source = new File("ajava.txt");

              

               // 备份的File对象

               File target = new File("ajava-backup.txt");

              

               //通过JVM读取java.io.tmpdir属性取得临时文件夹

               File targetDir = new File(System.getProperty("java.io.tmpdir"));

              

               try

               {

                       //在同一个文件夹复制文件

                       System.out.println("复制 " + source + " 文件到 " + target);

                       FileUtils.copyFile(source, target);

                      

                       // 根据指定的文件夹复制

                       System.out.println("复制 " + source + " 文件到" + targetDir + "目录");

                       FileUtils.copyFileToDirectory(source, targetDir);

               } catch (IOException e)

               {

                       // Errors will be reported here if any error occures during copying

                       // the file

                       e.printStackTrace();

               }

       }

}

输出结果为:

复制 ajava.txt 文件到 ajava-backup.txt

复制 ajava.txt 文件到C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp目录

再查看对应的文件夹,就可以发现备份文件。


相关推荐

PHP实现部分字符隐藏

沙雕mars · 1325浏览 · 2019-04-28 09:47:56
Java中ArrayList和LinkedList区别

kenrry1992 · 908浏览 · 2019-05-08 21:14:54
Tomcat 下载及安装配置

manongba · 970浏览 · 2019-05-13 21:03:56
JAVA变量介绍

manongba · 962浏览 · 2019-05-13 21:05:52
什么是SpringBoot

iamitnan · 1086浏览 · 2019-05-14 22:20:36
加载中

0评论

评论
我目前在一家互联网公司,从事运营工作,地标是南方的深圳,希望可以认识更多的朋友。
分类专栏
小鸟云服务器
扫码进入手机网页