开发中常用的Apache开源的操作文件和IO的包

Apache开源的IO包和Lang包

开发中我们常常会使用到Apache这两个包, 所以总结一下一些常用的方法

common.io包

common.io包和是apache旗下开源的一个用来操作文件和IO的常用包。
其封装了很多好用的便捷IO API
主要由以下六部分组成

  • Utility classes - with static methods to perform common tasks
  • Input - useful Input Stream and Reader implementations
  • Output - useful Output Stream and Writer implementations
  • Filters - various implementations of file filters

包含大量已经实现好的过滤器, 可以拿来即用.


文件过滤器
  • Comparators - various implementations of java.util.Comparator for files
  • File Monitor - a component for monitoring file system events

commons.lang包

org.apache.commons也是apache开源的包
java的标准类库并没有提供足够多的方法来操作和核心类库。Apache Commons Lang提供了这些额外的方法
主要提供了以下几类方法

  • 字符串操作方法
  • 基本数值类型操作方法
  • 对象反射
  • 并发
  • 对象创建和序列化

注意: Lang3.0(及后续版本)使用org.apache.commons.lang3包, 先前版本是org.apache.commons.lang

maven导入

    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.6</version>
    </dependency>
    
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.7</version>
    </dependency>

常用的类

  • FileUtils
  • IOUtils
  • StringUtils

FileUtils常用的API

readFileToString()

功能: 读取文本内容转换为字符串.不会抛出异常

@Test
public void testFileUtils_readFileToString() {

    try {
        String encoding = "UTF-8";
        String str = FileUtils.readFileToString(new File("2.txt"), encoding);
        System.out.println(str);
    } catch (IOException e) {
        e.printStackTrace();
    }
}
writeStringToFile()

功能: 将字符串写入到指定文件中.可能会抛出IOException

@Test
public void testFileUtils_writeStringToFile() {

    File file = new File("testFileUtils.txt");
    String str = "I love bj\nI love bj\n我爱北京\n";
    String encoding = "UTF-8";
    try {
       FileUtils.writeStringToFile(file, str, encoding);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

forceMkdir()

功能: 创建多级目录, 如果父目录不存在则会字自动创建.因为权限等其他原因创建失败会抛出IOException

@Test
public void testFileUtils_forceMkdir() {
    File file = new File("/data/1/2/3");
    try {
        FileUtils.forceMkdir(file);
    } catch (IOException e) {
        e.printStackTrace();
    }
}
forceDelete()

功能: 用于强制删除文件或者目录.可能抛出IOException

@Test
public void testFileUtils_foreceDelete() {

    File dirOrFile = new File("/data");
    try {
        FileUtils.forceDelete(dirOrFile);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

copyFile()

功能: 拷贝文件

@Test
public void testFileUtils_copyFile() throws IOException {
    File src = new File("beauty.jpg");
    File dest = new File("beauty2.jpg");
    FileUtils.copyFile(src, dest);
}

copyDirectory()

功能:拷贝目录

@Test
public void testFileUtils_copyDirectory() {

   File srcDir = new File(".idea");
   File destDir = new File("copyIDEAConfig");

   try {
       FileUtils.copyDirectory(srcDir, destDir, new NameFileFilter("java"), true);
   } catch (IOException e) {
       e.printStackTrace();
   }
}

listFiles()

功能:列出当前目录下的所有文件,能够设置是否递归来控制是否获取多级目录

@Test
public void testFileUtils_listFiles() {

    File dir = new File(".");
    String[] extensions ={"java"};
    boolean recursive = true;
    Collection<File> files =  FileUtils.listFiles(dir, extensions, recursive);

    for (File file :
            files) {
        System.out.println(file);
    }
}

StringUtils常用API

字符串空白符和空判断

isBlank(final CharSequence cs)

功能: 判断字符串是否为空白符, 空字符串、空白符和null都为是空白符

@Test
public void testStringUtils_isBlank() {
    System.out.println(StringUtils.isBlank("    "));   // 输出true
    System.out.println(StringUtils.isBlank("   \t"));  // 输出true
    System.out.println(StringUtils.isBlank(""));       // 输出true
    System.out.println(StringUtils.isBlank(null));     // 输出true
    System.out.println(StringUtils.isBlank("a"));      // 输出false

}
isEmpty(final CharSequence cs)

功能: 判断字符串是否为空.只有空字符串和null表示字符串为空

@Test
public void testStringUtils_isEmpty() {
    System.out.println(StringUtils.isEmpty("    "));   // 输出false
    System.out.println(StringUtils.isEmpty("   \t"));  // 输出false
    System.out.println(StringUtils.isEmpty(""));       // 输出true
    System.out.println(StringUtils.isEmpty(null));     // 输出true
    System.out.println(StringUtils.isEmpty("a"));     // 输出false
}

字符串操作

join

功能: 主要功能是将数组转成字符串。并且按照指定分隔符拼接。
支持八大基本数据类型数组(处理boolean)、Iterable类型、Object类型数组

@Test
public void testStringUtils_join() {
    String str = StringUtils.join(new int[]{1,2,3,4,5}, '-');  // 输出1-2-3-4-5
    System.out.println(str);
    System.out.println(StringUtils.join(1,3,4, '+'));          // 输出123+
}
split

功能: 将字符串转字符串数组。按照指定分隔符进行分割.

@Test
public void testStringUtils_split() {
    String[] strs = StringUtils.split("a-b-c-d", '-');
    for (String word:strs
         ) {
        System.out.println(word);
    }
}
replace

功能: 字符串替换操作,指定源字符串、要匹配的字符串、要替换成的字符串

@Test
public void testStringUtils_replace() {
    String str = StringUtils.replace("a-b-c-d", "-", "+");
    System.out.println(str);
}
trimToNull

功能: trim的加强版, 如果trim后的字符串为空字符串,则返回null。否者返回trim后的字符串

@Test
public void testStringUtils_trimToNull() {
    String str = StringUtils.trimToNull("  abc my love ");
    System.out.println(str);
}

IOUtils常用API

拷贝

copy()

功能:copy方法是重载方法,起主要实现了输入流到输出流的拷贝功能

  • 能拷贝文件字节输入流到文件字节输出流,
  • 能拷贝到字符输出流.
  • 能从文件字符输入流中进行拷贝
  • 同时可以设置字符编码, 以正确的解析

将输入流里的数据拷贝到输出流, 可以用来实现文件拷贝功能

@Test
public void testIOUtils() {
    InputStream is = null;
    OutputStream os = null;
    try {
        is = new FileInputStream("2.txt");
        os = new FileOutputStream("2copy.txt");
        IOUtils.copy(is, os);
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            os.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
copyLarge()

copy方法其实是对copyLarge方法的包装。
copyLarge方法支持2GB文件以上的拷贝而copy对于2GB以上的大文件拷贝支持不好。
超过2GB以上的用copy方法能拷贝,但是拷贝完后会返回-1

创建输入流

toInputStream

功能: 根据字符串和编码格式直接创建包含该字符串数据的输入流

public void testIOUtils_getInputStream() {
    InputStream is = null;
    OutputStream os = null;
    try {
        is = IOUtils.toInputStream("hello beijing", "UTF-8");
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

当然其还能创建以下两种处理流, 文件字节缓冲流和字符缓冲留toBufferedInputStream、toBufferedReader

从流中读取数据

toString(final InputStream input, final String encoding)

功能: 从输入流中根据编码格式, 读取字符串数据

@Test
public void testIOUtils_toString() {

    InputStream is = null;
    try {
        is = IOUtils.toInputStream("hello beijing", "UTF-8");
        String strs = IOUtils.toString(is
                ,
                "UTF-8");

        System.out.println(strs);

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

还有toString(final Reader input)等重载方法

List<String> readLines(InputStream input, final String encoding)

功能: 从输入流中按行读取数据,而且这是一次性读取出来.没有BufferedReader那个按行读取实用

@Test
public void testIOUtils_readLines() {

    InputStream is = null;
    try {
        is = new FileInputStream("2.txt");
        List<String> lines = IOUtils.readLines(is, "UTF-8");
        for (String line :
                lines) {
            System.out.println(line);
        }

    }catch (IOException e) {

    }finally {
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

最后

还有很多的API就不一一总结。总结出常用的API。
这两个包所提供的功能很强大, 熟悉这些API对于开发效率能有很大的提升。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,076评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,658评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,732评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,493评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,591评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,598评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,601评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,348评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,797评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,114评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,278评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,953评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,585评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,202评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,180评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,139评论 2 352

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,647评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,617评论 18 399
  • 马史,一个有着导演梦的新疆男儿,一个恋家的新疆男儿,一个放弃自己在北京大好的发展前景一心想回到家乡的铁血铮铮的男儿...
    陌上_花开n阅读 493评论 0 0
  • 【 一 】 小曼姑娘最近在学德语,单词又长,语法又难,学一学很容易就想放弃。就算是兴趣也无法成为她最好的老师了。对...
    蔓尔阅读 680评论 0 1
  • 这家伙,一懒起来就止不住了!今天复试了,自我感觉很差。但是看面试老师的意思好像是:凑合过吧!还能离咋滴?到底是自己...
    Cheer_up阅读 189评论 0 1