如何删除文件中带有某个特定单词或者特定标识的行

这个小程序为需要在一个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("找不到该文件夹!");
		}

	}
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值