`
lippeng
  • 浏览: 456833 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

用Java的I/O批量替换某一文件夹下(包括其子文件夹)所有JSP文件中的中文为英文

阅读更多

昨天把提取搞定了,替换的代码也写好了,只是没有完全调试成功,原因是Map中的key 是 String,而我用的是 StringBuilder,没有显示的转换为String,这作为一个Map的key,是不会报错的,虽然已经范型过了,这可能也是java的容器类与范型结合,还没解决的问题吧。

现在把所有代码全部贴出来,如有朋友遇到同类问题,可以作为参考。

 

注:需要jxl的jar包,我的jdk是1.6的,1.5的应该也行跑

 

自己写的工具类:

package com.hc;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import jxl.Sheet;
import jxl.Workbook;

public class Util {

	// 判断一个unicode码是不是中文
	public static boolean isChinese(int charInt) {
		if (charInt > 19967 && charInt < 40870) {
			return true;
		} else {
			return false;
		}
	}

	// 字节流转换成字符流,同时转换编码
	public static BufferedReader changeEncoding(File file)
			throws FileNotFoundException, UnsupportedEncodingException {
		FileInputStream fin = new FileInputStream(file);
		InputStreamReader in = new InputStreamReader(fin, "gb2312");
		BufferedReader br = new BufferedReader(in);
		return br;
	}

	// 得到该文件夹,及其所有子文件夹下的所有目标文件
	public static List<File> getAllFiles(File file) {
		List<File> valueFiles = new ArrayList<File>();
		File[] fs = file.listFiles();
		for (int i = 0; i < fs.length; i++) {
			if (fs[i].isDirectory()) {
				// 递归得到每个子文件夹下的目标文件
				valueFiles.addAll(getAllFiles(fs[i]));
			}
		}
		// 把file文件夹下的目标文件放进去
		valueFiles.addAll(Arrays.asList(getFiles(file)));
		return valueFiles;
	}

	// 得到一个文件夹下的目标文件,不包括子文件夹
	private static File[] getFiles(File file) {
		// 图个方便,用匿名类了
		FileFilter filter = new FileFilter() {
			String regex = "\\w*\\.jsp";

			public boolean accept(File pathname) {
				return pathname.getName().matches(regex);// 文件后缀为.jsp
			}
		};
		File[] fs = file.listFiles(filter);
		return fs;
	}

	// 提取某一文件中的所有中文
	public static List<String> getChinese(File file) {
		try {
			List<String> valueList = new ArrayList<String>();
			BufferedReader charArrayReader = Util.changeEncoding(file);
			int i = -1;
			StringBuilder sBuilder = new StringBuilder();
			do {
				i = charArrayReader.read();
				// System.out.print((char)i);

				// 如果是中文
				if (Util.isChinese(i)) {
					sBuilder.append((char) i);
				}
				// 如果不是中 文
				else {
					// 如果是中文 后的第一个
					if (sBuilder.length() > 0) {
						// 把中文加进去
						valueList.add(sBuilder.toString());

						// 清除Builder里面的中文
						sBuilder.delete(0, sBuilder.length());
					}
					// 如果不是中文的结束,什么都不用做
				}
			} while (i != -1);
			System.out.println(valueList.size());
			return valueList;
		} catch (Exception e) {
			// 不做异常处理
			return null;
		}

	}

	// 把excel里面的中英文读进来,维护成一个map
	public static Map<String, String> getMap() {
		try {
			File file = new File("E:/FirstWork/中文.xls");
			// 怀疑编码有问题,写的调试代码,实事上,没有用到
			// InputStream inputStream = new FileInputStream(file);
			// WorkbookSettings workbookSettings = new WorkbookSettings();
			// workbookSettings.setEncoding("utf-8");
			Workbook workbook = Workbook.getWorkbook(file);
			Sheet sheet = workbook.getSheet(0);
			Map<String, String> map = new HashMap<String, String>();
			for (int i = 0; i < sheet.getRows(); i++) {
				// System.out.println(sheet.getCell(0,
				// i).getContents()+" "+sheet.getCell(1, i).getContents());
				// new String(sheet.getCell(0,
				// i).getContents().getBytes("UTF-8"),"gb2312")
				// map.put(new String(sheet.getCell(0,
				// i).getContents().getBytes("utf-16le"),"gb2312"), new
				// String(sheet.getCell(0,
				// i).getContents().getBytes("UTF-8"),"gb2312"));
				map.put(sheet.getCell(0, i).getContents(), sheet.getCell(1, i)
						.getContents());
			}
			return map;
		} catch (Exception e) {
			e.printStackTrace();
			// 不做异常处理了。。。
			return null;
		}

	}

	// 修改一个文件中的中文
	public static void editFile(File file, Map<String, String> map) {
		try {
			BufferedReader charArrayReader = Util.changeEncoding(file);
			int i = -1;
			StringBuilder newFileString = new StringBuilder();
			StringBuilder changeWord = new StringBuilder();
			do {
				i = charArrayReader.read();
				// System.out.print((char)i);

				// 如果是中文
				if (Util.isChinese(i)) {
					changeWord.append((char) i);
				}
				// 如果不是中 文
				else {
					// 如果是中文 后的第一个
					if (changeWord.length() > 0) {
						// 把中文加进去
						// System.out.println(changeWord+" "+map.get(changeWord.toString()));

						// 特别注意:key 是String,StringBuilder 要显示的转为String
						// ,不会自动调用toString方法的。
						// 这是我直到最后才怀疑的地方
						newFileString.append(map.get(changeWord.toString()));
						// 清除changeWordBuilder里面的中文
						changeWord.delete(0, changeWord.length());
					}
					// 如果不是中文的结束,什么都不用做
					// 把非中文放进去
					newFileString.append((char) i);
				}
			} while (i != -1);
			Util.writeBack(file, newFileString.toString());
		} catch (Exception e) {
			// 不做异常处理
			e.printStackTrace();
		}

	}

	private static void writeBack(File file, String string) throws IOException {
		// 字节流
		FileOutputStream fout = new FileOutputStream(file);
		// 字符流
		OutputStreamWriter out = new OutputStreamWriter(fout, "gb2312");
		BufferedWriter bw = new BufferedWriter(out);
		bw.write(string);
		bw.flush();
		bw.close();

	}

}

 下面就是调用了:

package com.hc;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class Test {

	// // 取JSP页面中所有的中文
	// public static void main(String[] args) {
	// // 该文件夹下的所有目标文件
	// File file = new File("E:/FirstWork/rgsZS/webcontext/");
	//
	// // 得到所有目标文件
	// List<File> fileList = Util.getAllFiles(file);
	// System.out.println("共有JSP文件:" + fileList.size() + "个");
	//
	// // 提取所有文件中的中文
	// List<String> strList = new ArrayList<String>();
	// for (File file2 : fileList) {
	// strList.addAll(Util.getChinese(file2));
	// }
	//
	// // 把提取出来的中文打出来
	// for (String string : strList) {
	// System.out.println(string);
	// }
	//
	// }

	// 从excel读出中文和对应的英文,并写入所有的JSP文件
	public static void main(String[] args) {
		Map<String, String> map = Util.getMap();
		System.out.println(map.size());
		System.out.println(map.keySet());

		// 该文件夹下的所有目标文件
		File file = new File("E:/FirstWork/rgsZS/webcontext/");

		// 得到所有目标文件
		List<File> fileList = Util.getAllFiles(file);
		System.out.println("共有JSP文件:" + fileList.size() + "个");

		// 修改所有文件中的中文
		for (File file2 : fileList) {
			Util.editFile(file2, map);
		}

	}

}
 
0
0
分享到:
评论

相关推荐

    【大数据课设】p105出租车数据可视化分析-大数据-实训大作业.zip

    项目资源包含:可运行源码+数据集+文档 python + numpy, pandas, matplotlib, pyecharts, wordcloud 适用人群:学习不同技术领域的小白或进阶学习者;可作为课程设计、大作业、工程实训或初期项目立项。 数据来源:数据集taxis.csv从网络下载 数据清洗:异常值与缺失值的处理:有一些数据distance(乘车距离)为零而且上下车地点为空,还有些一些数据的payment(支付方式)为空。 数据预处理:将列名更改成中文 标准化与归一化: 数据分析: 数据可视化:

    TypeScript 入门教程

    TypeScript 入门教程

    人脸识别_课堂考勤_OpenCV_服务端系统_1741777828.zip

    人脸识别项目实战

    历届电赛试题及综合测评(真题+模拟题)

    本资源汇总了 历届全国电子设计竞赛(电赛)真题+模拟题,涵盖 电路设计、嵌入式系统、信号处理、自动控制等核心考点,并提供详细解析及综合测评,帮助参赛者高效备赛、查漏补缺、提升实战能力。 适用人群: 适合 准备参加电子设计竞赛的大学生、电赛爱好者、电子信息类相关专业的学生,以及希望提高电子设计和电路分析能力的工程师。 能学到什么: 电赛考察重点:熟悉往届竞赛的命题方向及考核重点。 电路设计与仿真:提升模拟电路、数字电路、单片机等核心技能。 问题分析与解决能力:通过综合测评找到薄弱点并针对性提升。 实战经验:掌握竞赛策略,提高应试效率和设计能力。 阅读建议: 建议先 通读真题,了解题型与解题思路,然后 结合模拟题实战演练,查找不足并通过测评强化练习,逐步提升竞赛能力。

    2024人工智能如何塑造未来产业:AI对各行业组织带来的的变革研究研究报告.pdf

    2024人工智能如何塑造未来产业:AI对各行业组织带来的的变革研究研究报告.pdf

    人脸识别_Golang_SDK_命令行登录_微信小程序应用_1741772240.zip

    人脸识别项目源码实战

    Vulkan原理与实战课程

    给大家分享一套课程——Vulkan原理与实战课程

    SiriYXR_Sokoban11_1741860914.zip

    c语言学习

    海豚鲸鱼数据集 5435张图 正确识别率可达92.6% 可识别:海豚 虎鲸 蜥蜴 海豹 鲨鱼 龟 支持yolov8格式标注

    海豚鲸鱼数据集 5435张图 正确识别率可达92.6% 可识别:海豚 虎鲸 蜥蜴 海豹 鲨鱼 龟 支持yolov8格式标注

    答谢中书书教学设计.docx

    答谢中书书教学设计.docx

    人脸识别_环境搭建_dlib_face_recognitio_1741771308.zip

    人脸识别项目源码实战

    网络技术_Web服务器_C语言_学习交流版_1741863251.zip

    c语言学习

    安卓开发_Gradle配置_React_Native_Meg_1741777287.zip

    人脸识别项目源码实战

    人工智能_深度学习_图像识别_UI界面_项目展示.zip

    人脸识别项目实战

    基于Springboot框架的美发门店管理系统的设计与实现(Java项目编程实战+完整源码+毕设文档+sql文件+学习练手好项目).zip

    本美发门店管理系统有管理员和用户两个角色。用户功能有项目预定管理,产品购买管理,会员充值管理,余额查询管理。管理员功能有个人中心,用户管理,美容项目管理,项目类型管理,项目预定管理,产品库存管理,产品购买管理,产品入库管理,会员卡管理,会员充值管理,余额查询管理,产品类型管理,系统管理等。因而具有一定的实用性。 本站是一个B/S模式系统,采用SSM框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得美发门店管理系统管理工作系统化、规范化。本系统的使用使管理人员从繁重的工作中解脱出来,实现无纸化办公,能够有效的提高美发门店管理系统管理效率。 关键词:美发门店管理系统;SSM框架;MYSQL数据库;Spring Boot 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关技术 2 2.1 MYSQL数据库 2 2.2 B/S结构 3 2.3 Spring Boot框架简介 4 3系统分析 4 3.1可行性分析 4 3.1.1技术可行性 4 3.1.2经济可行性 5 3.1.3操作可行性 5 3.2系

    Python实现基于SSA-CNN-GRU麻雀算法优化卷积门控循环单元数据分类预测的详细项目实例(含完整的程序,GUI设计和代码详解)

    内容概要:本文档介绍了基于SSA-CNN-GRU麻雀算法优化卷积门控循环单元数据分类预测的详细项目实例,重点讲述了该项目的背景、目标、挑战与解决方案、技术特点、应用领域等方面的内容。文档详细记录了从项目启动、数据预处理、算法设计(SSA优化CNN-GRU模型)、构建与评估模型到实现美观的GUI界面整个过程,并讨论了防止过拟合的技术如正则化、早停和超参数优化。另外还涵盖了项目扩展的可能性、部署和应用策略、需要注意的地方以及未来改进的方向。全文强调了模型的泛化能力和计算效率,展示了该混合算法模型在实际应用中的优越性能。 适合人群:具备一定的Python编程经验及机器学习基础知识的研究人员和技术人员;对深度学习、智能优化算法及实际应用感兴趣的学者和从业者;寻求提升数据分析和预测准确性的金融分析师、数据科学家等相关专业人士。 使用场景及目标:本文档非常适合用作学习和参考资料,以掌握如何将SSA、CNN与GRU三种先进技术结合起来进行复杂的分类和预测问题求解。具体应用场景包括但不限于以下几个方面:金融领域——股票价格预测;医疗保健领域——辅助诊断;工业制造——预防性维护;智能家居——个性化服务;以及其他涉及到时序数据分析和多模态数据处理的场合。文档既包含了理论知识又提供了完整的源代码示例,可以帮助读者理解算法原理并通过实践中加深对其的认识。 其他说明:该项目不仅仅是关于算法的设计实现,更是有关于系统的整体架构规划以及工程上的考量,比如环境准备(确保环境洁净、必要包的安装等)、数据准备、GPU配置支持等等。同时文中给出了详细的代码片段,方便开发者理解和复现实验成果。值得注意的是,虽然文中提供了一套通用解决方案,但在真实场景下还需要针对性的调整参数或修改网络结构来达到最好的性能效果。此外,对于追求更高的预测精度或解决更大规模的问题,作者建议进一步探索深度强化学习等高级技术和多任务学习策略,并且考虑使用增量学习让模型能够适应新数据而不必重新训练整个模型。最后提到安全性和隐私保护也是项目实施过程中的重要因素,要妥善保管用户的敏感信息并且做到合法合规地收集和使用数据。

    人脸识别_T形分布_Gabor变换_特征提取_增强鲁棒性_1741777397.zip

    人脸识别项目实战

    13005463562_FaceWeb_1741771809.zip

    人脸识别项目实战

    水下垃圾检测数据集,基于voc和yolo标注的两种格式

    水下垃圾检测数据集,基于voc和yolo标注的两种格式,共23,056个文件,已经划分了训练集和验证集、测试集。并且提供了真实水下的视频数据,可以用作视频推理

    (参考GUI)MATLAB车辆检测.zip

    (参考GUI)MATLAB车辆检测.zip

Global site tag (gtag.js) - Google Analytics