`

用java-io查找包含关键字的文件或用某些字符替代掉指定的字符,大小写转换

    博客分类:
  • java
阅读更多
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SearchOrReplaceKeyword {

	public static int count = 1;// 用于统计数量

	/**
	 * 测试
	 */
	public static void main(String[] args) {

		replaceAllFile(new File("C:/Documents and Settings/Administrator/桌面/new/tract"),".xsl","@StatisticDate","@ReportStatisticDate");
		replaceAllFile(new File("C:/Documents and Settings/Administrator/桌面/new/tract"), ".xsl", "<p class=\"reportdetail\">没有数据</p>", "<p class=\"reportdetail\">没有数据!</p>");
		System.out.println("end");
	}

	/**
	 * 搜索到要查找的关键字就打印其文件名
	 * 
	 * @param dir:文件目录
	 * @param fileType:文件类型
	 * @param keyword:要查找的关键字,这个关键字是正则表达式的形式
	 */
	public static void searchFile(File dir, String fileType, String keyword) {
		if (dir.isDirectory()) {
			for (File file : dir.listFiles()) {
				if (file.isDirectory()) {
					searchFile(file, fileType, keyword);
				} else {
					if (file.getName().endsWith(fileType)) {
						String path = getFilePath(file, keyword);

						if (null != path) {
							System.out.println(path);
						}

					}
				}
			}
		}
	}

	/**
	 * 返回文件路径或null
	 * 
	 * @param file:被查找的文件
	 * @param keyword:查看文件是否包含此关键字,这个关键字是正则表达式的形式
	 * @return
	 */
	public static String getFilePath(File file, String keyword) {
		BufferedReader br = null;
		try {
			// 读取文件
			br = new BufferedReader(new FileReader(file));
			String line = "";
			while ((line = br.readLine()) != null) {
				//if (line.contains(keyword)) {
					//return file.getPath();
				//}
				//正则表达式的方式查找所要找的内容
				Pattern pattern = Pattern.compile(keyword);
				Matcher matcher = pattern.matcher(line);
				if (matcher.find()) {
					return file.getPath();
				}
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		return null;

	}

	/**
	 * 用新的字符串替代指定的字符串
	 * 
	 * @param dir:文件目录
	 * @param fileType:文件类型
	 * @param keyword:被替代的关键字
	 * @param newWord:替代关键字的字符串
	 */
	public static void replaceAllFile(File dir, String fileType, String keyword, String newWord) {
		if (dir.isDirectory()) {
			for (File file : dir.listFiles()) {
				if (file.isDirectory()) {
					replaceAllFile(file, fileType, keyword, newWord);
				} else {
					if (file.getName().endsWith(fileType)) {
						replaceFile(file, keyword, newWord);
					}
				}
			}
		}
	}

	/**
	 * 用新的字符串替代指定的字符串
	 * 
	 * @param file:文件
	 * @param keyword:被替代的关键字
	 * @param newWord:替代关键字的字符串
	 */
	public static void replaceFile(File file, String keyword, String newWord) {
		// StringBuilder stringBuilder = new StringBuilder();
		StringBuffer stringBuilder = new StringBuffer("");
		BufferedReader br = null;
		BufferedWriter bw = null;
		boolean flag = false;
		try {
			// 读取文件
			br = new BufferedReader(new FileReader(file));
			String line = "";
			while ((line = br.readLine()) != null) {
				if (line.contains(keyword)) {
					line = line.replaceAll(keyword, newWord);
					flag = true;
				}
				stringBuilder.append(line);
				stringBuilder.append("\n");
			}

			if (flag) {
				// 写文件
				bw = new BufferedWriter(new FileWriter(file));
				//这里用了一个字符转换的类
				bw.write(new ChangeCharest().toGBK(stringBuilder.toString()));
				System.out.println((count++) + "修改了" + file.getPath());
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (null != bw) {
					bw.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				if (null != br) {
					br.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}

}

import java.io.UnsupportedEncodingException;

/** *
 * 转换字符串的编码
 *
 */

public class ChangeCharest {
    /** *//** 7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁块      */
    public static final String US_ASCII = "US-ASCII";
    /** *//** ISO拉丁字母表 No.1,也叫做ISO-LATIN-1     */
    public static final String ISO_8859_1 = "ISO-8859-1";
    /** *//** 8 位 UCS 转换格式     */
    public static final String UTF_8 = "UTF-8";
    /** *//** 16 位 UCS 转换格式,Big Endian(最低地址存放高位字节)字节顺序     */
    public static final String UTF_16BE = "UTF-16BE";
    /** *//** 16 位 UCS 转换格式,Litter Endian(最高地址存放地位字节)字节顺序     */
    public static final String UTF_16LE = "UTF-16LE";
    /** *//** 16 位 UCS 转换格式,字节顺序由可选的字节顺序标记来标识     */
    public static final String UTF_16 = "UTF-16";
    /** *//** 中文超大字符集     **/
    public static final String GBK = "GBK";
    
    public static final String GB2312 = "GB2312";
    
    /** *//** 将字符编码转换成US-ASCII码     */
    public String toASCII(String str) throws UnsupportedEncodingException{
        return this.changeCharset(str, US_ASCII);
    }
    
    /** *//** 将字符编码转换成ISO-8859-1     */
    public String toISO_8859_1(String str) throws UnsupportedEncodingException{
        return this.changeCharset(str, ISO_8859_1);
    }
    
    /** *//** 将字符编码转换成UTF-8     */
    public String toUTF_8(String str) throws UnsupportedEncodingException{
        return this.changeCharset(str, UTF_8);
    }
    
    /** *//** 将字符编码转换成UTF-16BE     */
    public String toUTF_16BE(String str) throws UnsupportedEncodingException{
        return this.changeCharset(str, UTF_16BE);
    }
    
    /** *//** 将字符编码转换成UTF-16LE     */
    public String toUTF_16LE(String str) throws UnsupportedEncodingException{
        return this.changeCharset(str, UTF_16LE);
    }
    
    /** *//** 将字符编码转换成UTF-16     */
    public String toUTF_16(String str) throws UnsupportedEncodingException{
        return this.changeCharset(str, UTF_16);
    }
    
    /** *//** 将字符编码转换成GBK     */
    public String toGBK(String str) throws UnsupportedEncodingException{
        return this.changeCharset(str, GBK);
    }
    
    /** *//** 将字符编码转换成GB2312     */
    public String toGB2312(String str) throws UnsupportedEncodingException{
        return this.changeCharset(str,GB2312);
    }
    
    /** *//**
     * 字符串编码转换的实现方法
     * @param str    待转换的字符串
     * @param newCharset    目标编码
     */
    public String changeCharset(String str, String newCharset) throws UnsupportedEncodingException{
        if(str != null){
            //用默认字符编码解码字符串。与系统相关,中文windows默认为GB2312
            byte[] bs = str.getBytes();
            return new String(bs, newCharset);    //用新的字符编码生成字符串
        }
        return null;
    }
    
    /** *//**
     * 字符串编码转换的实现方法
     * @param str    待转换的字符串
     * @param oldCharset    源字符集
     * @param newCharset    目标字符集
     */
    public String changeCharset(String str, String oldCharset, String newCharset) throws UnsupportedEncodingException{
        if(str != null){
            //用源字符编码解码字符串
            byte[] bs = str.getBytes(oldCharset);
            return new String(bs, newCharset);
        }
        return null;
    }
    
    public static void main(String[] args) throws UnsupportedEncodingException{
        ChangeCharest test = new ChangeCharest();
        String str = "This is a 中文的 String!";
        System.out.println("str:" + str);
        
        String gbk = test.toGBK(str);
        System.out.println("转换成GBK码:" + gbk);
        System.out.println();
        
        String ascii = test.toASCII(str);
        System.out.println("转换成US-ASCII:" + ascii);
        System.out.println();
        
        String iso88591 = test.toISO_8859_1(str);
        System.out.println("转换成ISO-8859-1码:" + iso88591);
        System.out.println();
        
        gbk = test.changeCharset(iso88591, ISO_8859_1, GBK);
        System.out.println("再把ISO-8859-1码的字符串转换成GBK码:" + gbk);
        System.out.println();
        
        String utf8 = test.toUTF_8(str);
        System.out.println();
        System.out.println("转换成UTF-8码:" + utf8);
        String utf16be = test.toUTF_16BE(str);
        System.out.println("转换成UTF-16BE码:" + utf16be);
        gbk = test.changeCharset(utf16be, UTF_16BE, GBK);
        System.out.println("再把UTF-16BE编码的字符转换成GBK码:" + gbk);
        System.out.println();
        
        String utf16le = test.toUTF_16LE(str);
        System.out.println("转换成UTF-16LE码:" + utf16le);
        gbk = test.changeCharset(utf16le, UTF_16LE, GBK);
        System.out.println("再把UTF-16LE编码的字符串转换成GBK码:" + gbk);
        System.out.println();
        
        String utf16 = test.toUTF_16(str);
        System.out.println("转换成UTF-16码:" + utf16);
        String gb2312 = test.changeCharset(utf16, UTF_16, GB2312);
        System.out.println("再把UTF-16编码的字符串转换成GB2312码:" + gb2312);
    }

} 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
//文件内容大写转小写
public class UpperToLower
{
    public static void main(String [] args){
        //contentUpperToLower(new File("D:/common2.css"));
        replaceAllFile(new File("D:/css"), "css");
    }
    
    public static void replaceAllFile(File dir, String fileType) {  
        if (dir.isDirectory()) {  
            for (File file : dir.listFiles()) {  
                if (file.isDirectory()) {  
                    replaceAllFile(file, fileType);  
                } else {  
                    if (file.getName().endsWith(fileType)) {  
                        contentUpperToLower(file);  
                    }  
                }  
            }  
        }  
    }

    private static void contentUpperToLower(File file)
    {

        StringBuffer stringBuilder = new StringBuffer("");  
        BufferedReader br = null;  
        BufferedWriter bw = null;  
       // boolean flag = false;  
        try {  
            // 读取文件  
            br = new BufferedReader(new FileReader(file));  
            String line = "";  
            int count = 0;
            while ((line = br.readLine()) != null) {  
                line = line.toLowerCase();
                stringBuilder.append(line);  
                stringBuilder.append("\n");  
                count++;
            }  
  
           // if (flag) {  
                // 写文件  
                bw = new BufferedWriter(new FileWriter(file));  
                //这里用了一个字符转换的类  
                bw.write(new ChangeCharest().toGBK(stringBuilder.toString()));  
                System.out.println((count++) + "修改了" + file.getPath());  
           // }  
  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                if (null != bw) {  
                    bw.close();  
                }  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
            try {  
                if (null != br) {  
                    br.close();  
                }  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }
        
    }

}

分享到:
评论

相关推荐

    正交频分复用 (OFDM) 基础收发机Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    通信工程勘察设计安全操作规程.docx

    通信工程勘察设计安全操作规程.docx

    【数据库技术】SQL入门与实战指南:从基础语法到应用场景的全面解析

    内容概要:本文是一篇面向初学者和技术爱好者的《SQL 入门与实战》指南,系统介绍了 SQL 的基本概念、功能及其应用场景。文章首先解释了 SQL 是一种用于操作关系型数据库的语言,能够执行数据的存储、查询、更新、删除以及表结构管理等操作。接着详细列举了基础语法,包括 SELECT、INSERT、UPDATE 和 DELETE 等语句的具体用法,并对常用的函数进行了分类说明,如聚合函数、字符串函数、时间函数等。此外,还深入探讨了多表连接、分组与聚合、子查询和窗口函数等进阶语法技巧。为了帮助读者更好地掌握 SQL,文中提供了从初级到高级的学习路线,并通过实际案例展示了 SQL 在后端 API 查询、数据报表分析、数据清洗与迁移等场景中的应用。最后简要比较了几种常见的数据库系统特性,强调了 SQL 在数据处理领域的重要性。 适合人群:适合初学者、实用派和技术爱好者,尤其是那些希望快速上手 SQL 并应用于实际工作的人员,如前端、后端、测试工程师、数据分析师和产品经理等。 使用场景及目标:①作为 SQL 学习入门资料,帮助读者理解 SQL 的基本概念和语法;②指导读者进行 SQL 编程实践,掌握数据查询、更新、插入、删除及表结构管理等操作;③为有经验的开发者提供进阶技巧,如多表连接、子查询、窗口函数等;④为从事数据相关工作的人员提供实用工具,提高工作效率。 其他说明:文章不仅涵盖了 SQL 的基础知识,还涉及到了一些高级主题,如事务、索引、视图、触发器等,并给出了进一步学习的书籍和在线资源推荐,鼓励读者通过持续学习来深化对 SQL 的理解和应用。

    wps办公日常使用11111111

    wps办公日常使用11111111

    卡通小熊素材PPT模板.pptx

    卡通小熊素材PPT模板

    汽车电子:MATLAB_实现CAN总线通信协议分析与故障诊断.pdf

    文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 你是否渴望高效解决复杂的数学计算、数据分析难题?MATLAB 就是你的得力助手!作为一款强大的技术计算软件,MATLAB 集数值分析、矩阵运算、信号处理等多功能于一身,广泛应用于工程、科学研究等众多领域。 其简洁直观的编程环境,让代码编写如同行云流水。丰富的函数库和工具箱,为你节省大量时间和精力。无论是新手入门,还是资深专家,都能借助 MATLAB 挖掘数据背后的价值,创新科技成果。别再犹豫,拥抱 MATLAB,开启你的科技探索之旅!

    支付技术基于MCP协议的支付宝AI支付工具集成:支付管理与应用场景详解

    内容概要:本文介绍了国内首个支付MCP(Model Context Protocol)框架,它定义了AI模型如何调用外部支付工具、获取支付数据并与支付服务交互。支付宝与魔搭社区合作,基于支付MCP Server框架为AI智能体提供无缝支付能力。支付MCP Server具有以下特点:支持MCP协议,简化支付接入流程;多端支持,涵盖移动端和网页端支付场景;全流程支付管理,包括支付、查询、退款等功能;灵活配置选项,满足不同开发需求。文中详细描述了支付MCP Server的功能,如创建支付、查询支付状态、发起退款和查询退款信息等,并提供了具体的配置方法和应用场景案例,如AI助手帮助用户在线购物、AI客服处理退款请求等。 适合人群:具有一定编程基础和技术背景的研发人员,尤其是对AI与支付集成感兴趣的开发者。 使用场景及目标:① 开发人员可以通过支付MCP Server快速实现支付功能,简化开发流程;② 提供全流程支付管理,增强应用的支付处理能力;③ 支持多端支付场景,提升用户体验;④ 通过灵活配置,满足不同业务需求,创造更多商业机会。 阅读建议:此资源详细介绍了支付M

    环境工程:MATLAB_实现大气污染扩散模型与可视化分析.pdf

    文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 你是否渴望高效解决复杂的数学计算、数据分析难题?MATLAB 就是你的得力助手!作为一款强大的技术计算软件,MATLAB 集数值分析、矩阵运算、信号处理等多功能于一身,广泛应用于工程、科学研究等众多领域。 其简洁直观的编程环境,让代码编写如同行云流水。丰富的函数库和工具箱,为你节省大量时间和精力。无论是新手入门,还是资深专家,都能借助 MATLAB 挖掘数据背后的价值,创新科技成果。别再犹豫,拥抱 MATLAB,开启你的科技探索之旅!

    【充电桩通信技术】基于云快充最新版协议的充电桩与新能源管理系统交互流程及数据格式定义:涵盖通信接口、帧类型、实时数据与运营交互等详细规范标题严格按照您的要求

    内容概要:本文档详细介绍了云快充最新版本的充电桩通讯协议,涵盖了从总则、通信协议结构、应用层报文帧格式、帧类型定义、通信协议流程、注册心跳帧类型码、实时数据帧类型码、运营交互帧类型码、运营平台设置帧类型码、车位锁通信协议、电桩远程维护帧类型码、并充模式帧类型码到附录的完整内容。重点描述了充电桩与新能源管理信息系统之间的数据交互流程、格式和内容,明确了通信接口采用TCP/IP Socket方式,支持有线网络接口和无线GPRS连接。文档还具体阐述了帧结构、数据格式定义、名词解释、各种帧类型的数据定义及流程,如上电流程、APP充电流程、刷卡充电、离线充电模式等,并提供了CRC16校验计算方法。 适合人群:从事充电桩开发、运维的技术人员,以及负责充电桩与平台对接的工程师。 使用场景及目标:①指导技术人员完成充电桩与新能源管理信息系统的对接,确保数据交互的正确性和稳定性;②帮助工程师理解并实现充电桩的各种功能,如登录认证、心跳包、实时数据传输、远程控制等;③为充电桩的日常维护和远程更新提供技术支持。 其他说明:本协议适用于交直流充电桩,交流部分数据无需上送。协议基于国网104充电桩规约,并参考GBT-27930标准。测试服务器地址为121.199.192.223,端口号为8768。文档还提供了详细的帧类型码定义和CRC16校验计算方法,确保数据传输的准确性。

    监理网站推广方案.docx

    监理网站推广方案.docx

    HI3519DV500 配置无线网依赖库以及编译脚本

    HI3519DV500 配置无线网依赖库以及编译脚本

    Clion和MinGW

    Clion和MinGW

    hardware-MLK-F6-7020.rar

    hardware_MLK-F6-7020.rar

    如何查看死锁.md

    如何查看死锁

    定制小米8-lineage22.1安卓15-fast功能项目线刷双版root 解锁bl后fast线刷

    资源说明; 1-----刷写前提是手机必须解锁bl先。而且会在fast模式刷写固件 2-----刷写方法与官方刷写步骤一样 3-----此固件为定制初始固件。可以在fast模式刷写 4-----属于适配固件。也许有个别bug。不接受请勿下载 5-----需要一定的刷机常识与动手能力的友友刷写。 6-----资源有可复制性。下载后不支持退。请知悉 7-----定制其他需求可以在csdn私信博主 博文参阅:https://csdn9.blog.csdn.net/article/details/143058308

    敏感图片敏感图片敏感图片敏感图片敏感图片敏感图片11

    敏感图片敏感图片敏感图片敏感图片敏感图片敏感图片11敏感图片敏感图片敏感图片敏感图片敏感图片敏感图片1122

    UniApp中使用renderjs进行AI对话实现流式请求及流式响应方式

    通过UniApp+vueJs+renderJs的前端框架实现一个AI对话的小功能,AI回答使用流式请求,响应流式输出的小案例。解决兼容低版本的手机端运行不支持流式Fetch的请求方式;

    铁路接触网检测:MATLAB无人机影像绝缘子定位.pdf

    文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 你是否渴望高效解决复杂的数学计算、数据分析难题?MATLAB 就是你的得力助手!作为一款强大的技术计算软件,MATLAB 集数值分析、矩阵运算、信号处理等多功能于一身,广泛应用于工程、科学研究等众多领域。 其简洁直观的编程环境,让代码编写如同行云流水。丰富的函数库和工具箱,为你节省大量时间和精力。无论是新手入门,还是资深专家,都能借助 MATLAB 挖掘数据背后的价值,创新科技成果。别再犹豫,拥抱 MATLAB,开启你的科技探索之旅!

    智慧矿山:MATLABDEM+SPH耦合算法在矿石破碎过程仿真中的应用.pdf

    文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 你是否渴望高效解决复杂的数学计算、数据分析难题?MATLAB 就是你的得力助手!作为一款强大的技术计算软件,MATLAB 集数值分析、矩阵运算、信号处理等多功能于一身,广泛应用于工程、科学研究等众多领域。 其简洁直观的编程环境,让代码编写如同行云流水。丰富的函数库和工具箱,为你节省大量时间和精力。无论是新手入门,还是资深专家,都能借助 MATLAB 挖掘数据背后的价值,创新科技成果。别再犹豫,拥抱 MATLAB,开启你的科技探索之旅!

    限定对比度自适应直方图均衡化图像去雾

    限定对比度自适应直方图均衡化图像去雾

Global site tag (gtag.js) - Google Analytics