前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java中的IO流(三)Apache Commons IO组件的常用操作

Java中的IO流(三)Apache Commons IO组件的常用操作

作者头像
HcodeBlogger
发布2020-07-14 09:59:36
1.7K0
发布2020-07-14 09:59:36
举报
文章被收录于专栏:Hcode网站Hcode网站

前言

这次带来的是Apache开源组织的CommonsIO集成组件的FileUtils和IOUtils常用操作。

下载

首先应该去Apache CommonsIO下载网址将组件的压缩包下载到本地。

下载完后解压打开文件夹,这两个圈着的jar包便是需要导入到java的JVM里面的

导包

  1. 如何往eclipse导入jar包,可以看看百度经验的eclipse导jar包操作
  2. 往idea导包操作如下 1)打开项目(或者创建项目以后,点击菜单File->Project Structure)

2) 选择Modules点击要添加的项目名,在选择Dependencies,

3)点击添加,添加JAR,然后选择已经本地路径中下载好的jar包。

具体使用

打开CommonsIO的API文档,一些常用的方法如下

cleanDirectory:清空目录,但不删除目录。 contentEquals:比较两个文件的内容是否相同。 copyDirectory:将一个目录内容拷贝到另一个目录。可以通过FileFilter过滤需要拷贝的 文件。 copyFile:将一个文件拷贝到一个新的地址。 copyFileToDirectory:将一个文件拷贝到某个目录下。 copyInputStreamToFile:将一个输入流中的内容拷贝到某个文件。 deleteDirectory:删除目录。 deleteQuietly:删除文件。 listFiles:列出指定目录下的所有文件。 openInputSteam:打开指定文件的输入流。 readFileToString:将文件内容作为字符串返回。 readLines:将文件内容按行返回到一个字符串数组中。 size:返回文件或目录的大小。 write:将字符串内容直接写到文件中。 writeByteArrayToFile:将字节数组内容写到文件中。 writeLines:将容器中的元素的toString方法返回的内容依次写入文件中。 writeStringToFile:将字符串内容写到文件中。

FileUtils类

Ⅰ统计文件和文件夹的部分操作
代码语言:javascript
复制
 public static void main(String[] args) throws IOException {

       long len1 =  FileUtils.sizeOf(new File("E:/py/小说/第一章.txt"));//获取文件大小
       long len2 = FileUtils.sizeOf(new File("E:/py"));//获取整个文件夹目录的大小
       //过滤,空文件不记录,递归进行遍历
       Collection<File> files= FileUtils.listFiles(new File("E:/py/小说"), EmptyFileFilter.NOT_EMPTY, DirectoryFileFilter.INSTANCE);
        for (File file:files) {//遍历文件夹
            System.out.println(file.getAbsolutePath());
        }

        //只取文件后缀名为class和txt的文件,DirectoryFileFilter.INSTANCE,方法将使用递归的形式来进行文件过滤扫描。
        Collection<File> files1= FileUtils.listFiles(new File("E:/py/小说"),
                FileFilterUtils.or(new SuffixFileFilter("txt"),new SuffixFileFilter("class")), DirectoryFileFilter.INSTANCE);

    }
Ⅱ文件的内容读取
代码语言:javascript
复制
public static void main(String[] args) throws IOException {
        //文件读取
        String msg = FileUtils.readFileToString(new File("E:/py/小说/第一章.txt"),"UTF-8");
        System.out.println(msg);
        byte[] datas = FileUtils.readFileToByteArray(new File("E:/py/小说/第一章.txt"));
        //逐行读取
        List<String> msgs = FileUtils.readLines(new File("E:/py/小说/第一章.txt"),"UTF-8");
        for (String str:msgs){
            System.out.println(str);
        }
        LineIterator it = FileUtils.lineIterator(new File("E:/py/小说/第一章.txt"),"UTF-8");
        while(it.hasNext()){
            System.out.println(it.nextLine());
        }

    }
Ⅲ内容写出到文件
代码语言:javascript
复制
 //写出文件
 String st="h哈哈";
 FileUtils.write(new File("123.txt"),st,"UTF-8",true);//true表示可用追加内容
 FileUtils.writeStringToFile(new File("123.txt"),st,"UTF-8",true)//写出字符串
 FileUtils.writeByteArrayToFile(new File("123.sxt"), "Himit_ZH真帅\r\n".getBytes("UTF-8"),true);//将一个字节数组写到文件。
 //写出一个列表
 List<String> datas =new ArrayList<String>();
 datas.add("你好");
 datas.add("我好");
 FileUtils.writeLines(new File("123.sxt"), datas,"#",true);//#为间隔符
Ⅳ文件拷贝
代码语言:javascript
复制
//将文件123copy到123副本
FileUtils.copyFile(new File("123.txt"),new File("123副本.txt"));
//将文件123复制到指定文件夹目录
FileUtils.copyFileToDirectory(new File("123.txt"),new File("E:/py"));
//复制目录到目录
FileUtils.copyDirectoryToDirectory(new File("E:/py"),new File("E:/py"));
//拷贝URL对应网页的内容到文件
String url ="http://www.baidu.com";
IOUtils.toString(new URL(url),"UTF-8");
FileUtils.copyURLToFile(new URL(url),new File("123.txt"));

IOUtils类

常用的静态变量设置如下

代码语言:javascript
复制
public static final char DIR_SEPARATOR_UNIX = '/';
public static final char DIR_SEPARATOR_WINDOWS = '\\';
public static final char DIR_SEPARATOR;
public static final String LINE_SEPARATOR_UNIX = "\n";
public static final String LINE_SEPARATOR_WINDOWS = "\r\n";
public static final String LINE_SEPARATOR;


static {
    DIR_SEPARATOR = File.separatorChar;

    StringBuilderWriter buf = new StringBuilderWriter(4);
    PrintWriter out = new PrintWriter(buf);
    out.println();
    LINE_SEPARATOR = buf.toString();
    out.close();
}

一些常用的主要方法,具体使用可用去看官方给的API文档

copy 支持多种数据间的拷贝: copy(inputstream,outputstream) copy(inputstream,writer)..... read 从一个流中读取内容 read(inputstream,byte[]) .... readFully 这个方法会读取指定长度的流,如果读取的长度不够,就会抛出异常 readLines 方法可以从流中读取内容,并转换为String的list skip 这个方法用于跳过指定长度的流, skipFully 这个方法类似skip,只是如果忽略的长度大于现有的长度,就会抛出异常 write 这个方法可以把数据写入到输出流中 writeLines 这个方法可以把string的List写入到输出流中 close 关闭URL连接 closeQuietly 忽略nulls和异常,关闭某个流 contentEquals 比较两个流是否相同 contentEqualsIgnoreEOL 比较两个流,忽略换行符 lineIterator 读取流,返回迭代器 toBufferedInputStream 把流的全部内容放在另一个流中 toBufferedReader 返回输入流 toByteArray 返回字节数组 toCharArray 返回字符数组 toInputStream 返回输入流 toString 返回字符串

一个小小的例子对比

Ⅰ读取内容
代码语言:javascript
复制
//使用JDK的方法
InputStream in = new URL( "https://www.hcode.top" ).openStream();
try {
   InputStreamReader inR = new InputStreamReader( in );
   BufferedReader buf = new BufferedReader( inR );
   String line;
   while ( ( line = buf.readLine() ) != null ) {
     System.out.println( line );
   }
} finally {
   in.close();
}



// 使用 IOUtils 的方法
InputStream in = new URL( "https://www.hcode.top" ).openStream();
try {
   System.out.println( IOUtils.toString( in ) );
} finally {
   IOUtils.closeQuietly(in);
}

List<String> list = IOUtils.readLines(in, "UTF-8");//只要是InputStream流都可以,比如http响应的流
//直接把流读取为String
String content = IOUtils.toString(in,"UTF-8");
//把流转换为byte数组
byte[] bytes = IOUtils.toByteArray(in);
Ⅱ内容写入流
代码语言:javascript
复制
//把数据写入输出流
char [] ch = new char[]{'a','a','b'};
byte [] by =  "aaaa".getBytes();
IOUtils.write("abc", outputStream);
IOUtils.write(ch, outputStream);
IOUtils.write(by, outputStream,"UTF-8");
List<String> lines = new ArrayList();
lines.add("Himit_ZH");
lines.add("handsome");
OutputStream os = new FileOutputStream("E:/123.txt");
IOUtils.writeLines(lines,IOUtils.LINE_SEPARATOR,os);
//把字符串转换流
InputStream inputStream = IOUtils.toInputStream("Himit_ZH", "UTF-8");
Ⅲ流的关闭
代码语言:javascript
复制
try {
     IOUtils.copy(inputStream, outputStream);
 } finally {
     IOUtils.closeQuietly(inputStream);
     IOUtils.closeQuietly(outputStream);
 }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020年4月12日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 下载
    • 导包
    • 具体使用
      • FileUtils类
        • Ⅰ统计文件和文件夹的部分操作
        • Ⅱ文件的内容读取
        • Ⅲ内容写出到文件
        • Ⅳ文件拷贝
      • IOUtils类
        • Ⅰ读取内容
        • Ⅱ内容写入流
        • Ⅲ流的关闭
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档