序言
使用 JAVA
的 文件相关 API 从一个超多条 txt
文件的大数据包中,拷贝所需的几百条数据到另外的文件夹下。
前置条件
这里提供了一个模拟开发情形,数据量较小。
原数据包
目标文件名单
代码
package com.fahai.mytest;
import java.io.*;
public class FilterFiles {
public static void main(String[] args) throws FileNotFoundException {
//获取文件的输入流
FileInputStream fileInputStream = new FileInputStream("D:\\文件名.txt");
//创建一个文件对象(这是一个文件夹)
File file = new File("D:\\文件");
//遍历文件夹下的所有文件
String[] list = file.list();
//创建一个高效的读取器,读取所有目标文件名称
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));
try {
//读目标文件中的一行
String line = bufferedReader.readLine();
//如果这一行有数据
while ( line != null){
//遍历提取文件目录中的数据包
for (String s : list) {
//如果匹配到了目标文件
if(s.matches(line+".txt")){
//提示
System.out.println("这是采集的"+s);
//获取目标文件的输入流
FileInputStream copyStream = new FileInputStream("D:\\文件\\" + s);
//指定一个拷贝路径
String path = "D:\\文件\\copy";
//判断是否存在此地址,不存在则创建
File file1 = new File(path);
if(!file1.exists()) file1.mkdir();
//创建一个文件对象,用于接收输出的目标文件流
File result = new File(path + "\\" + s);
//创建目标文件输出流
FileOutputStream fileOutputStream = new FileOutputStream(result);
//写操作的核心
int len;
byte[] bytes = new byte[1024];
while ( (len = copyStream.read(bytes)) != -1){
fileOutputStream.write(bytes,0,len);
}
//关流
copyStream.close();
fileOutputStream.close();
//结束本次匹配文件的循环
break;
}
}
//继续读取下一行的目标文件名
line = bufferedReader.readLine();
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
//关流
fileInputStream.close();
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
结果