package o.o.utils;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
/*
* author:Micky
* version:1.0.0
* Date:2017年8月18日 下午11:46:15
*/
public class FileUtils {
/*
* @parameter 指定路径filePath,指定文件名 fileName
*
* @return 匹配文件的具体文件路径的列表
*/
public List containFileName(String filePath, String fileName) {
List filePathList = new ArrayList();
File dir = new File(filePath);
List files = new ArrayList();
if (dir.isDirectory()) {
files = getterAllFiles(dir);
files.stream().filter(f -> f.getName().contains(fileName))
.forEach(f -> filePathList.add(f.getAbsolutePath()));
} else if (dir.isFile() && dir.getName().contains(fileName)) {
filePathList.add(dir.getAbsolutePath());
}
return filePathList;
}
/*
* 递归得到指定路径下的所有文件
*/
public List getterAllFiles(File dir) {
List files = new ArrayList();
List childfiles = Arrays.asList(dir.listFiles());
childfiles.stream().forEach(f -> {
if (f.isDirectory()) {
files.addAll(getterAllFiles(f));
} else {
files.add(f);
}
});
return files;
}
/*
* @parameter 指定路径filePath,指定字符串specialString
*
* @return 包含特殊字段的文件的具体文件路径的列表
*/
public List containSpecialString(String filePath,
String specialString) {
List filePathList = new ArrayList();
File dir = new File(filePath);
List files = new ArrayList();
if (dir.isDirectory()) {
files = getterAllFiles(dir);
files.stream().filter(f -> isContainSpecialStr(f, specialString))
.forEach(f -> filePathList.add(f.getAbsolutePath()));
} else if (dir.isFile() && isContainSpecialStr(dir, specialString)) {
filePathList.add(dir.getAbsolutePath());
}
return filePathList;
}
public boolean isContainSpecialStr(File file, String str) {
String strLine = "";
boolean flag = false;
try {
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(new FileInputStream(file)));
while ((strLine = bufferedReader.readLine()) != null) {
if (strLine.contains(str)) {
flag = true;
}
}
if (bufferedReader != null)
bufferedReader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return flag;
}
/*
* @parameter 指定具体文件以及所含特殊字段
*
* @return 指定字段所在文件路径及其在文件中的行数以及行具体信息的嵌套map
*/
public Map> containSpecialStringReturnMap(
String filePath, String specialString) {
Map> filePathMap = new HashMap<>();
File dir = new File(filePath);
List files = new ArrayList();
if (dir.isDirectory()) {
files = getterAllFiles(dir);
files.stream()
.filter(f -> isContainSpecialStr(f, specialString))
.forEach(
f -> filePathMap.put(f.getAbsolutePath(),
containSpecialStrInfo(f, specialString)));
} else if (dir.isFile() && isContainSpecialStr(dir, specialString)) {
filePathMap.put(dir.getAbsolutePath(),
containSpecialStrInfo(dir, specialString));
}
return filePathMap;
}
/*
* @parameter 指定具体文件以及所含特殊字段
*
* @return 指定字段在文件中的行数以及行具体信息的map
*/
public Map containSpecialStrInfo(File file, String str) {
Map specialStrInfo = new LinkedHashMap();
if (file.isDirectory()) {
return specialStrInfo;
}
String strLine = "";
try {
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(new FileInputStream(file)));
int row = 1;
while ((strLine = bufferedReader.readLine()) != null) {
if (strLine.contains(str)) {
specialStrInfo.put(row, strLine);
}
row++;
}
if (bufferedReader != null)
bufferedReader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return specialStrInfo;
}
}