Common IO 使用小结

commons-io是一款处理io流的工具,封装了很多处理io流和文件的方法,可以大大简化我们处理io流和操作文件的代码。从common-io的官方使用文档可以看出,它主要分为工具类、尾端类、行迭代器、文件过滤器、文件比较器和扩展流。

官网地址:http://commons.apache.org/proper/commons-io/

下载 :http://commons.apache.org/proper/commons-io/download_io.cgi

一、工具类
工具类包括FileUtils、IOUtils、FilenameUtils和FileSystemUtils,前三者的方法并没有多大的区别,只是操作的对象不同,故名思议:FileUtils主要操作File类,IOUtils主要操作IO流,FilenameUtils则是操作文件名,FileSystemUtils包含了一些JDK没有提供的用于访问文件系统的实用方法。当前,只有一个用于读取硬盘空余空间的方法可用。实例如下

FileUtils的使用:

package com.wj.test;

import java.io.File;
import java.io.IOException;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class FileUtilsTest {

private String basePath = null;

@Before
public void setUp() {
	basePath = System.getProperty("user.dir") + "\\file\\";
}

@After
public void tearDown() throws Exception {
}

/**
 * 拷贝文件
 * @throws IOException
 */
@Test
public void testCopy() throws IOException {
	File srcFile = new File(basePath + "a.txt");
	File destFile = new File(basePath + "b.txt");
	FileUtils.copyFile(srcFile, destFile);
}

/**
 * 删除文件
 * @throws IOException
 */
@Test
public void testDelete() throws IOException{
	File delFile = new File(basePath + "b.txt");
	FileUtils.forceDelete(delFile);
	//FileUtils.forceMkdir(delFile);
}

/**
 * 比较文件内容
 * @throws IOException
 */
@Test
public void testCompareFile() throws IOException{
	File srcFile = new File(basePath + "a.txt");
	File destFile = new File(basePath + "b.txt");
	boolean result = FileUtils.contentEquals(srcFile, destFile);
	System.out.println(result);
}

/**
 * 移动文件
 * @throws IOException
 */
@Test
public void testMoveFile() throws IOException{
	File srcFile = new File(basePath + "b.txt");
	File destDir = new File(basePath + "move");
	FileUtils.moveToDirectory(srcFile, destDir, true);
}

/**
 * 读取文件内容
 * @throws IOException
 */
@Test 
public void testRead() throws IOException{
	File srcFile = new File(basePath + "a.txt");
	String content = FileUtils.readFileToString(srcFile);
	List<String> contents = FileUtils.readLines(srcFile);
	System.out.println(content);
	System.out.println("******************");
	for (String string : contents) {
		System.out.println(string);
	}
}

/**
 * 写入文件内容
 * @throws IOException
 */
@Test
public void testWrite() throws IOException{
	File srcFile = new File(basePath + "a.txt");
	FileUtils.writeStringToFile(srcFile, "\nyes文件", true);
}

}

FileSystemUtils的使用:
package com.wj.test;

import java.io.IOException;

import org.apache.commons.io.FileSystemUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class FileSystemUtilsTest {
@Before
public void setUp() throws Exception {
}

@After
public void tearDown() throws Exception {
}

/**
 * 获取磁盘空余空间
 * @throws IOException
 */
@SuppressWarnings("deprecation")
@Test
public void testFreeSpace() throws IOException {
	// 以字节为单位
	System.out.println(FileSystemUtils.freeSpace("c:\\") / 1024 / 1024 / 1024);
	System.out.println(FileSystemUtils.freeSpace("d:\\") / 1024 / 1024 / 1024);
	// 以k为单位
	System.out.println(FileSystemUtils.freeSpaceKb("e:\\") / 1024 / 1024);
	System.out.println(FileSystemUtils.freeSpaceKb("f:\\") / 1024 / 1024);
	
}

}

二、尾端类

不同的计算机体系结构使用不同约定的字节排序。在所谓的“低位优先”体系结构中(如Intel),低位字节处于内存中最低位置,而其后的字节,则处于更高的位置。在“高位优先”的体系结构中(如Motorola),这种情况恰恰相反。

这个类库上有两个相关类:

EndianUtils包含用于交换java原对象和流之间的字节序列。

SwappedDataInputStream类是DataInput接口的一个实例。使用它,可以读取非本地的字节序列。

三、行迭代器
org.apache.commons.io.LineIterator类提供了一个灵活的方式与基于行的文件交互。可以直接创建一个实例,或者使用FileUtils或IOUtils的工厂方法来创建,实例如下:

package com.wj.test;

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class LineIteratorTest {

private String basePath = null;

@Before
public void setUp() throws Exception {
	basePath = System.getProperty("user.dir") + "\\file\\";
}

@After
public void tearDown() throws Exception {
}

/**
 * 测试行迭代器
 * @throws IOException
 */
@Test
public void testIterator() throws IOException{
	File file = new File(basePath + "a.txt");
	LineIterator li = FileUtils.lineIterator(file);
	while(li.hasNext()){
		System.out.println(li.nextLine());
	}
	LineIterator.closeQuietly(li);
}

}

四、文件过滤器
org.apache.commons.io.filefilter包定义了一个合并了java.io.FileFilter以及java.io.FilenameFilter的接口(IOFileFilter)。除此之外,这个包还提供了一系列直接可用的IOFileFilter的实现类,可以通过他们合并其它的文件过滤器。比如,这些文件过滤器可以在列出文件时使用或者在使用文件对话框时使用。实例如下:

package com.wj.test;

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.filefilter.EmptyFileFilter;
import org.apache.commons.io.filefilter.SuffixFileFilter;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class FileFilterTest {

private String basePath = null;

@Before
public void setUp() throws Exception {
	basePath = System.getProperty("user.dir") + "\\file\\";
}

@After
public void tearDown() throws Exception {
}

/**
 * 空内容文件过滤器
 * @throws IOException
 */
@Test
public void testEmptyFileFilter() throws IOException{
	File dir = new File(basePath);
	String[] files = dir.list(EmptyFileFilter.NOT_EMPTY);
	for (String file : files) {
		System.out.println(file);
	}
}

/**
 * 文件名称后缀过滤器
 * @throws IOException
 */
@Test
public void testSuffixFileFilter() throws IOException{
	File dir = new File(basePath);
	String[] files = dir.list(new SuffixFileFilter("a.txt"));
	for (String file : files) {
		System.out.println(file);
	}
}

}

五、文件比较器
org.apache.commons.io.comparator包为java.io.File提供了一些java.util.Comparator接口的实现。例如,可以使用这些比较器对文件集合或数组进行排序。实例如下:

package com.wj.test;

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.comparator.CompositeFileComparator;
import org.apache.commons.io.comparator.DirectoryFileComparator;
import org.apache.commons.io.comparator.NameFileComparator;
import org.apache.commons.io.comparator.PathFileComparator;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class ComparatorTest {

private String basePath = null;

@Before
public void setUp() throws Exception {
	basePath = System.getProperty("user.dir") + "\\file\\";
}

@After
public void tearDown() throws Exception {
}

/**
 * 文件名称比较器
 * @throws IOException
 */
@Test
public void testNameFileComparator() throws IOException {
	File f1 = new File(basePath + "a.txt");
	File f2 = new File(basePath + "c.txt");
	int result = NameFileComparator.NAME_COMPARATOR.compare(f1, f2);
	System.out.println(result);
}

/**
 * 文件路径比较器
 * @throws IOException
 */
@Test
public void testPathFileComparator() throws IOException {
	File f1 = new File(basePath + "a.txt");
	File f2 = new File(basePath + "c.txt");
	int result = PathFileComparator.PATH_COMPARATOR.compare(f1, f2);
	System.out.println(result);
}

/**
 * 组合比较器
 * @throws IOException
 */
@SuppressWarnings("unchecked")
@Test
public void testCompositeFileComparator() throws IOException {
	File dir = new File(basePath);
	File [] files = dir.listFiles();
	for (File file : files) {
		System.out.println(file.getName());
	}
	CompositeFileComparator cfc = new CompositeFileComparator(
			DirectoryFileComparator.DIRECTORY_COMPARATOR,
			NameFileComparator.NAME_COMPARATOR);
	cfc.sort(files);
	System.out.println("*****after sort*****");
	for (File file : files) {
		System.out.println(file.getName());
	}
}

}

六、扩展流
org.apache.commons.io.input和org.apache.commons.io.output包中包含的针对数据流的各种各样的的实现。包括:

空输出流-默默吸收发送给它的所有数据
T型输出流-全用两个输出流替换一个进行发送
字节数组输出流-这是一个更快版本的JDK类
计数流-计算通过的字节数
代理流-使用正确的方法委拖
可锁写入-使用上锁文件提供同步写入
等等

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于BERT构建新闻文本分类模型,并结合node.js + vue完成了一个可视化界面。 爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值