1.获取文件夹下对应后缀的文件路径
/**
* 获取当前文件夹下所有符合后缀的文件绝对路径
*/
@Override
public ArrayList<String> readFilesUnderFolder(String filepath, String suffix) {
ArrayList<String> filePathList = new ArrayList<String>();
File file = new File(filepath);
if (!file.isDirectory()) {
System.out.println("输入参数必须是一个文件夹的路径!");
} else if (file.isDirectory()) {
String[] filelist = file.list();
for (int i = 0; i < filelist.length; i++) {
File readfile = new File(filepath + "\\" + filelist[i]);
if (!readfile.isDirectory()){// 只处理是文件的路径,是文件夹的涉及到下面的递归查找了,后面单独实现
String totalPath=readfile.getAbsolutePath();
String baseName = readfile.getName();
if(baseName.endsWith(suffix)) {
filePathList.add(totalPath);
}
}
}
}
return filePathList;
}
2.按行获取文件下内容
/**
* 获取当前路径下文件的内容
*/
public static ArrayList<String> readLineStrings(String filePath,String encoding) {
ArrayList<String> list=new ArrayList<String>();
String str = "";
FileInputStream fis = null;
InputStreamReader isr = null;
BufferedReader br = null; // 用于包装InputStreamReader,提高处理性能。因为BufferedReader有缓冲的,而InputStreamReader没有。
try {
fis = new FileInputStream(filePath);// FileInputStream
// 从文件系统中的某个文件中获取字节
isr = new InputStreamReader(fis,encoding);// InputStreamReader 是字节流通向字符流的桥梁,
br = new BufferedReader(isr);// 从字符输入流中读取文件中的内容,封装了一个new
// InputStreamReader的对象
while ((str = br.readLine()) != null) {
list.add(str);
}
} catch (FileNotFoundException e) {
System.out.println("找不到指定文件");
} catch (IOException e) {
System.out.println("读取文件失败");
} finally {
try {
br.close();
isr.close();
fis.close();
// 关闭的时候最好按照先后顺序关闭最后开的先关闭所以先关s,再关n,最后关m
} catch (IOException e) {
e.printStackTrace();
}
}
return list;//返回list
}
3.递归查找指定路径下指定后缀的所有文件
public ArrayList<String> readFilesUnderFolderCursively(String filepath,String suffix,String encoding){//先写文件再读文件就好了
ArrayList<String> filePathList = new ArrayList<String>();
System.out.println(filepath);
readFilesUnderFolderCursivelySon(filepath,suffix,encoding);
filePathList =readLineStrings(System.getProperty("user.dir")+"\\temp.txt",encoding);
delete(System.getProperty("user.dir")+"\\temp.txt");
return filePathList;
}
/**
* 读取某个文件夹下的所有指定后缀类型的文件,递归查找,因为每一次递归都会重新创建一个list,所以只能靠引用传值
*/
public void readFilesUnderFolderCursivelySon(String filepath,String suffix,String encoding) {
File file = new File(filepath);
if (!file.isDirectory()) {
System.out.println("输入参数必须是一个文件夹的路径!");
} else if (file.isDirectory()) {
String[] filelist = file.list();
for (int i = 0; i < filelist.length; i++) {
File readfile = new File(filepath + "\\" + filelist[i]);
if (!readfile.isDirectory()){//如果是路径的话
String totalPath=readfile.getAbsolutePath();
if(totalPath.endsWith(suffix)) {
// System.out.println(totalPath);
fileAppend(System.getProperty("user.dir")+"\\temp.txt", encoding, totalPath);//追加要用GBK才能写入中文哦!!
}
} else if (readfile.isDirectory()) {
readFilesUnderFolderCursivelySon(filepath + "\\" + filelist[i], suffix,encoding);//递归查找
}
}
}
}
//向文件中追加内容
public static void fileAppend(String filePath,String encoding,String content) {
BufferedWriter out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(filePath, true),encoding));
out.write(content + "\r\n");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//删除文件
public static void delete(String filePath) {
File file = new File(filePath);
if(file.exists()) {
file.delete();
}
}
4.日志写入
/**
* 向文件中写入自定义内容,兼容中文,如果文件原来存在,会先删除的,适合一次性写入日志
*/
public static void fileWrite(String filePath,String encoding,String content) {
File file = new File(filePath);
if(file.exists()) {
file.delete();//结果文件存在的话先删除,适合写入日志
}
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
System.out.println("文件夹"+file.getParentFile()+"原来不存在,已经新建好了!");
}
try{
file.createNewFile();
System.out.println(filePath+"原来不存在,已经创建成功!");
} catch (IOException e) {
e.printStackTrace();
System.out.println(filePath+"创建文件失败唉");
}
try {
// FileOutputStream out = new FileOutputStream(file);
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(file), encoding));
// byte buy[] = tcContent.getBytes();// 以字节流的方式写入到文件中
// out.write(buy);
out.write(content);
out.close();
} catch (FileNotFoundException e) {
System.out.println(filePath+"写入文件内容失败!文件未找到的错误如下:");
e.printStackTrace();
} catch (IOException e) {
System.out.println(filePath+"写入文件内容失败!流错误如下:");
e.printStackTrace();
}
}