这个小程序为需要在一个txt文件或其他文件中大量删除某个特定标识所在的行的操作提供了方便
程序主要运用的是关于Java IO的知识,代码中有冗余的部分,也有可以改动使代码变的更加简洁的部分,但个人认为,这应该是最通俗易懂的部分。
话不多说,下面贴上我的代码,部分有注释,部分无注释,若哪儿看不懂,可以在评论区下面留言喔~
package file;
import java.io.*;
import java.util.*;
/*
* 1.读取制定文件夹中的txt文件
* 2.判断txt文件的每一行是否有"prompt"
* 3.删除带有"prompt"的行
*
* */
public class FileDelete {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
List<File> list = new ArrayList<File>();
File fi = new File("/Users/fangweizhou/Downloads/数据库表");
dirFile(fi, list);
delete(fi, list);
}
public static void dirFile(File fi, List<File> list) {
File[] files = fi.listFiles();
for (File file : files) {
// 判断file是否为一个目录,若是,将该file中的所有txt文件放入list集合中
if (file.isDirectory())
// 若目录中不再存在目录,即进入该目录下进行下一步操作
dirFile(file, list);
else {
if (file.getName().endsWith(".txt"))
list.add(file);
}
}
}
public static void delete(File fi, List<File> list) throws IOException {
if (fi.exists()) {
for (File file : list) {
// 创建一个读取流对象和文件相关联。
FileReader f = new FileReader(file);
// 将读取格式改为"UTF-8"格式(该格式为中文格式)
InputStreamReader read = new InputStreamReader(new FileInputStream(file), "UTF-8");
// 加入缓冲技术。将字符读取流对象作为参数传递给缓冲对象的构造函数。
BufferedReader br = new BufferedReader(f);
String line = null;
StringBuilder sb = new StringBuilder();
String s = "prompt";
while ((line = br.readLine()) != null) {
if (line.contains(s)) {
sb.append("\r\n");
} else {
sb.append(line + "\r\n");
}
}
br.close();
OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
if (sb.length() > 1000) {
bw.write(sb.toString());
}
bw.flush();
}
} else {
System.out.println("找不到该文件夹!");
}
}
}