当前位置: 首页 > news >正文

【commons-io】File对文件与目录的处理FileUtis,IOUtils,FilenameUtils工具的使用

 

-------------------File的使用--------------

1.File类对文件的处理

1.1目录结构:

 

 

 1.2测试对文件Test.txt处理:

    // 测试文件
    @Test
    public void test1() throws IOException {
        String contextPath = System.getProperty("user.dir");// 获取项目名字
        System.out.println("文件路径:  " + contextPath + "/Test.txt");
        // 创建File的第一种方式
        // File file = new File(contextPath + "/Test.txt");
        // 第二种方式
        File file = new File(contextPath, "/Test.txt");
        // 判断文件是否存在,如果不存在就新创文件
        if (!file.exists()) {
            // file.delete();删除文件
            file.createNewFile();// 创建一个Text.txt文件
            System.out.println("新增文件");
        }
        System.out.println("是否是文件" + file.isFile());
        System.out.println("是否是目录" + file.isDirectory());
        // 获取文件大小(以字节为单位)
        if (file.isFile()) {
            System.out.println("文件大小:" + file.length() + "字节");
        }
        System.out.println("此文件的上级目录是" + file.getParent());
    }

 

 结果:

文件路径:  E:\EclipseWorkspace\AllTest/Test.txt
是否是文件true
是否是目录false
文件大小:40字节
此文件的上级目录是E:\EclipseWorkspace\AllTest

 

 

 2.对目录的处理

 2.1目录结构:

 

 2.2测试代码:

    // 测试目录
    @Test
    public void test2() throws IOException {
        String contextPath = System.getProperty("user.dir");// 获取项目名字
        System.out.println("文件路径:  " + contextPath + "\\text");
        // 第一种方式
        // File file = new File(contextPath,"text");
        // 第二种
        File file = new File(contextPath, "text");
        System.out.println("文件是否存在" + file.exists());
        if (!file.exists()) {// 如果目录不存在
            file.mkdir();// 创建目录
        }
        // 判断文件是否存在,如果存在删除文件
        System.out.println("是否是文件" + file.isFile());
        System.out.println("是否是目录" + file.isDirectory());
        // 列举目录下的文件的名字
        if (file.isDirectory()) {
            File[] listFiles = file.listFiles();
            System.out.println("目录下的文件有:");
            for (File fi : listFiles) {
                // 列举文件名字与大小
                System.out.println(fi.getName() + "   大小    " + fi.length() * 1.0 / 1024 + "KB");
                // 删除文件
                System.out.println("文件将被删除");
                fi.delete();
            }
        }
        System.out.println("此文件的上级目录是" + file.getParent());
    }

 

结果:

文件路径:  E:\EclipseWorkspace\AllTest\text
文件是否存在true
是否是文件false
是否是目录true
目录下的文件有:
1.txt   大小    0.015625KB
文件将被删除
9.20PDM截图.pdf   大小    193.109375KB
文件将被删除
web.xml   大小    0.951171875KB
文件将被删除
此文件的上级目录是E:\EclipseWorkspace\AllTest

 

 

 

 

 

 

总结:如果删除一个目录下的文件可以用上述的办法遍历一个目录下的文件然后删除文件。

 

 

 -------------------FileUtils\Filenameutils\IOUtils的使用(commons-io.jar)--------------

需要注意的是tomcat的包下也有一个这个类,注意用的是commons-io的包,不要用错:

 参考:http://langgufu.iteye.com/blog/2215918

 

分类说明演示:

    1.写 文件/文件夹

/* 写文件 
 * 1.这里只列出3种方式全参数形式,api提供部分参数的方法重载 
 * 2.最后一个布尔参数都是是否是追加模式 
 * 3.如果目标文件不存在,FileUtils会自动创建 
 * */  
//static void:write(File file, CharSequence data, String encoding, boolean append)   
FileUtils.write(new File("D:/a/b/cxyapi.txt"), "程序换api","UTF-8",true);  
  
//static void:writeLines(File file, Collection<?> lines, boolean append)   
List<String> lines=new ArrayList<String>();  
lines.add("欢迎访问:");lines.add("www.cxyapi.com");  
FileUtils.writeLines(new File("D:/a/b/cxyapi.txt"),lines,true);  
  
//static void:writeStringToFile(File file, String data, String encoding, boolean append)   
FileUtils.writeStringToFile(new File("D:/a/b/cxyapi.txt"), "作者:cxy", "UTF-8",true);  

 

 

 

    2.读 文件/文件夹

//读文件  
//static String:readFileToString(File file, String encoding)   
System.out.println(FileUtils.readFileToString(new File("D:/a/b/cxyapi.txt"), "UTF-8"));  
  
//static List<String>:readLines(File file, String encoding)   
System.out.println(FileUtils.readLines(new File("D:/a/b/cxyapi.txt"), "UTF-8")); //返回一个list  

 

 

 

    3.删除 文件/文件夹

//删除目录  
//static void:deleteDirectory(File directory)   
FileUtils.deleteDirectory(new File("D:/not/cxyapi"));  
  
//static boolean:deleteQuietly(File file)   
FileUtils.deleteQuietly(new File("D:/not/cxyapi")); //文件夹不是空任然可以被删除,永远不会抛出异常  

 

 

 

    4.移动 文件/文件夹

//移动文件 或 文件夹  
//static void:moveDirectory(File srcDir, File destDir)   
FileUtils.moveDirectory(new File("D:/cxyapi1"), new File("D:/cxyapi2")); //注意这里 第二个参数文件不存在会引发异常  
//static void:moveDirectoryToDirectory(File src, File destDir, boolean createDestDir)   
FileUtils.moveDirectoryToDirectory(new File("D:/cxyapi2"), new File("D:/cxyapi3"), true);  
/* 上面两个方法的不同是: 
 * moveDirectory:D:/cxyapi2里的内容是D:/cxyapi1的内容。 
 * moveDirectoryToDirectory:D:/cxyapi2文件夹移动到到D:/cxyapi3里 
 *  
 * 下面的3个都比较简单没提供示例,只提供了api 
 * 其中moveToDirectory和其他的区别是 它能自动识别操作文件还是文件夹 
 */  
//static void:moveFileToDirectory(srcFile, destDir, createDestDir)  
//static void:moveFile(File srcFile, File destFile)   
//static void:moveToDirectory(File src, File destDir, boolean createDestDir)  

 

 

 

    5.copy

//结果是cxyapi和cxyapi1在同一目录  
FileUtils.copyDirectory(new File("D:/cxyapi"), new File("D:/cxyapi1"));   
//结果是将cxyapi拷贝到cxyapi2下  
FileUtils.copyDirectoryToDirectory(new File("D:/cxyapi"), new File("D:/cxyapi2"));  
  
//拷贝文件  
FileUtils.copyFile(new File("d:/cxyapi.xml"), new File("d:/cxyapi.xml.bak"));  
//拷贝文件到目录中  
FileUtils.copyFileToDirectory(new File("d:/cxyapi.xml"), new File("d:/cxyapi"));  
//拷贝url到文件  
FileUtils.copyURLToFile(new URL("http://www.cxyapi.com/rss/cxyapi.xml"), new File("d:/cxyapi.xml"));  

 

 

 

    6.其他

//判断是否包含文件或者文件夹  
boolean b=FileUtils.directoryContains(new File("D:/cxyapi"), new File("D:/cxyapi/cxyapi.txt"));  
System.out.println(b);  
  
//获得临时目录 和 用户目录  
System.out.println(FileUtils.getTempDirectoryPath());  
System.out.println(FileUtils.getUserDirectoryPath());  
  
//打开流,如果不存在创建文件及其目录结构  
//第二个参数表示 文件流是否是追加方式  
FileOutputStream fos=FileUtils.openOutputStream(new File("D:/cxyapi/cxyapi.txt"),true);  
fos.write(new String("欢迎访问:www.cxyapi.com\r\n").getBytes());  
fos.close();  
  
//文件 或 文件夹大小  
System.out.println(FileUtils.sizeOf(new File("D:/cxyapi")));  
System.out.println(FileUtils.sizeOfDirectory(new File("D:/cxyapi"))); 

 

 

7.FilenameUtils可以对文件的名字进行处理,可以快速的获取文件的扩展名与基本名字:(commons-io.jar)

 

 

 

 

 

 补充:

 8.IOUtils实现文件拷贝

    org.apache.commons.io.IOUtils可以简单的将一个inputStream的文件读取到另一个outputStream,实现文件的拷贝,例如:

      只用传两个参数,第一个传递InputStream,第二个传递OutputStream

package cn.qlq.craw.Jsoup;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;

import org.apache.commons.io.IOUtils;

public class IOutilsDownloadFile {
    public static void main(String[] args) throws IOException {
        String url = "http://qiaoliqiang.cn/fileDown/zfb.bmp";
        URL url1 = new URL(url);
        URLConnection conn = url1.openConnection();
        InputStream inputStream = conn.getInputStream();
        String path = "C:\\Users\\liqiang\\Desktop\\test.bmp";
        OutputStream outputStream = new FileOutputStream(path);
        // 利用IOutiks拷贝文件,简单快捷
        IOUtils.copy(inputStream, outputStream);
    }
}

 

 IOUtils可以用来在finally中关闭流:(无条件的关闭而不抛出异常)

    public void exportExcel(OutputStream outputStream) {
        // 导出之前先自动设置列宽
        this.autoAllSizeColumn();
        try {
            workBook.write(outputStream);
        } catch (IOException e) {
            LOGGER.error(" exportExcel error", e);
        } finally {
            IOUtils.closeQuietly(outputStream);
        }
    }

 查看源码:

    /**
     * Unconditionally close an <code>OutputStream</code>.
     * <p>
     * Equivalent to {@link OutputStream#close()}, except any exceptions will be ignored.
     * This is typically used in finally blocks.
     * <p>
     * Example code:
     * <pre>
     * byte[] data = "Hello, World".getBytes();
     *
     * OutputStream out = null;
     * try {
     *     out = new FileOutputStream("foo.txt");
     *     out.write(data);
     *     out.close(); //close errors are handled
     * } catch (IOException e) {
     *     // error handling
     * } finally {
     *     IOUtils.closeQuietly(out);
     * }
     * </pre>
     *
     * @param output  the OutputStream to close, may be null or already closed
     */
    public static void closeQuietly(OutputStream output) {
        closeQuietly((Closeable)output);
    }
    /**
     * Unconditionally close a <code>Closeable</code>.
     * <p>
     * Equivalent to {@link Closeable#close()}, except any exceptions will be ignored.
     * This is typically used in finally blocks.
     * <p>
     * Example code:
     * <pre>
     *   Closeable closeable = null;
     *   try {
     *       closeable = new FileReader("foo.txt");
     *       // process closeable
     *       closeable.close();
     *   } catch (Exception e) {
     *       // error handling
     *   } finally {
     *       IOUtils.closeQuietly(closeable);
     *   }
     * </pre>
     *
     * @param closeable the object to close, may be null or already closed
     * @since 2.0
     */
    public static void closeQuietly(Closeable closeable) {
        try {
            if (closeable != null) {
                closeable.close();
            }
        } catch (IOException ioe) {
            // ignore
        }
    }

 

 

 

 

 

 

 

 

 

 

 

 

相关文章:

  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • vue2组件之间双向数据绑定问题
  • IO(字节流、字符流)
  • Linux环境安装docker
  • 康复者的福音来了,只要穿上这款机器人外骨骼便能自由转身
  • Linux系统的数据写入机制--延迟写入
  • 它改变了整个扫地机器人行业,如今被全面收购
  • Day16 Django
  • Paros proxy:网页程序漏洞评估代理
  • HTML 5 Web 存储-sessionStorage和localStorage
  • 使用Prometheus监控Cloudflare的全球网络
  • 歌词显示控件的实现下——自定义View
  • [内核驱动] miniFilter 内核层与应用程序通信
  • 关于form表单input text 未绑定回车事件跳转问题
  • Android照片墙完整版,完美结合 内存方案 LruCache 和 硬盘方案 DiskLruCache
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 10个确保微服务与容器安全的最佳实践
  • Angular4 模板式表单用法以及验证
  • Cookie 在前端中的实践
  • HTML中设置input等文本框为不可操作
  • Java读取Properties文件的六种方法
  • JS函数式编程 数组部分风格 ES6版
  • miaov-React 最佳入门
  • MySQL-事务管理(基础)
  • nginx 配置多 域名 + 多 https
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • ubuntu 下nginx安装 并支持https协议
  • vue--为什么data属性必须是一个函数
  • 好的网址,关于.net 4.0 ,vs 2010
  • 模型微调
  • 我从编程教室毕业
  • 详解移动APP与web APP的区别
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​Linux·i2c驱动架构​
  • #include<初见C语言之指针(5)>
  • #考研#计算机文化知识1(局域网及网络互联)
  • (阿里云万网)-域名注册购买实名流程
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)插入排序
  • (原)Matlab的svmtrain和svmclassify
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .NET多线程执行函数
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • /usr/bin/env: node: No such file or directory
  • [ C++ ] STL---仿函数与priority_queue
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...