`
itace
  • 浏览: 181551 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

更改html项目中的中文图片中文文件等中文路径

 
阅读更多

 

 

package com.chipmunk.test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import net.sourceforge.pinyin4j.PinyinHelper;

/**
 * 更改项目中的中文图片,中文文件等中文路径
 * @author chipmunk
 * @date 2018年3月14日 下午6:40:15
 */
public class ChineseToPinyin {

	public static String getPinyin(String t){
		char[]cs = t.toCharArray();
		StringBuffer sb = new StringBuffer();
		for (char c : cs) {
			String[]s=PinyinHelper.toHanyuPinyinStringArray(c);
			if (s!=null) {
				String u = s[0];
				if ("行".equals(c+"")) {
					u = s[1];
				}else if ("重".equals(c+"")) {
					u = s[1];
				}
				u = u.substring(0,u.length()-1);
				sb.append(u);
			}
		}
		
		return sb.toString();
	}
	public static String toPinyin(String t){
		char[]cs = t.toCharArray();
		StringBuffer sb = new StringBuffer();
		for (char c : cs) {
			String[]s=PinyinHelper.toHanyuPinyinStringArray(c);
			if (s!=null) {
				String u = s[0];
				if ("行".equals(c+"")) {
					u = s[1];
				}else if ("重".equals(c+"")) {
					u = s[1];
				}else {
					if (u.startsWith("lu:")) {
						u = u.replaceFirst("lu:", "lv");
//						u="lv";
					}
					
				}
				u = u.substring(0,u.length()-1);
				sb.append(u);
			}else {
				sb.append(c);
			}
		}
		
		return sb.toString();
	}
	public static boolean isChinese(String text) {
		String regex = "([\u4E00-\u9FA5])";
		int count1 = text.length();
		String text2 = text.replaceAll(regex, "");
		int count2 = text2.length();
		return count1>count2;
	}
	static Map<String, String> ZHONGWEN_PINYIN = new LinkedHashMap<String, String>();
	
	public static void traverseDir(File dir){
		File[]files = dir.listFiles();
		for (File file : files) {
			if (file.isDirectory()) {
				traverseDir(file);
			}else{
				String filename = file.getName();
				if (isChinese(filename)) {
					//去掉空格
					String filename2 = filename.replaceAll(" ", "");
					String pinyin = toPinyin(filename2);
					ZHONGWEN_PINYIN.put(filename,pinyin);
					File file_new = new File(file.getParentFile(),pinyin);
					file.renameTo(file_new);
				}
			}
		}
	}
	public static List<String> readLine(InputStream in, String charset) throws Exception {
		InputStreamReader isr = new InputStreamReader(in, charset);
		BufferedReader br = new BufferedReader(isr);
		List<String> list = new ArrayList<String>();
		String s;
		while ((s = br.readLine()) != null) {
			String t = StringUtil.toString(s, null);
			if (t != null) {
				list.add(t);
			}
		}
		br.close();
		isr.close();
		in.close();
		return list;
	}

	public static List<String> readLine(File file, String charset) throws Exception {
		FileInputStream in = new FileInputStream(file);
		return readLine(in, charset);
	}
	public static void write(File file, String text, String charset) throws Exception {
		FileOutputStream out = new FileOutputStream(file);
		byte[] bytes = text.getBytes(charset);//GBK,"UTF-8"
		out.write(bytes);
		out.close();
		out.flush();
	}
	public static boolean find(String word,String text){
		if (StringUtil.isBlank(word)) {
			return false;
		}
		if (StringUtil.isBlank(text)) {
			return false;
		}
		char[]w = word.toCharArray();
		char[]t = text.toCharArray();
		int size = w.length;
//		List<String> list = new ArrayList<String>();
		for (int i = 0; i < t.length; i++) {
			if(w[0]==t[i]){
				if(i+size-1<t.length){
					boolean bool = true;
					for (int j = 1; j < size; j++) {
						bool&=(w[j]==t[i+j]);
						if(!bool){
							break;
						}
					}
					if (bool) {
						return true;
					}
				}
			}
		}
		return false;
	}
	/**
	 * 查找text中是否包含的list的元素,返回包含的元素
	 * @Date: 2013-6-27下午02:57:28
	 * @Description: Set<String>
	 * @param list
	 * @param text
	 * @return
	 */
	public static Set<String> seek(Collection<String> col,String text){
		Set<String> set = new HashSet<String>();
		for (String word : col) {
			boolean bool = find(word, text);
			if(bool){
				set.add(word);
			}
		}
		return set;
	}
	/**
	 * 更改中文路径
	 * @param path_dir_image
	 * @param path_dir_html
	 */
	public static void changeChinesePath(String path_dir_image,String path_dir_html) {
//		System.out.println(toPinyin("20李白(1)诗人.jpg"));

		File dir_img = new File(path_dir_image);
		traverseDir(dir_img);
		Set<String> keys = ZHONGWEN_PINYIN.keySet();
//		for (String k : keys) {
//			System.out.println(k+"="+ZHONGWEN_PINYIN.get(k));
//		}
		
		try {
			File dir = new File(path_dir_html);
			File[]files = dir.listFiles(new FileFilter() {
				
				@Override
				public boolean accept(File f) {
					if (f.isFile()&&f.getName().endsWith(".html")) {
						return true;
					}else {
						return false;
					}
				}
			});
			for (File file : files) {
				System.out.println(file.getName());
				StringBuffer sb = new StringBuffer();
				List<String> htmlList = readLine(file, "UTF-8");
				for (String s : htmlList) {
					Set<String> filenames = seek(keys, s);
//					for (String ff : filenames) {
//						System.out.println(ff);
//					}
					if (filenames.size()>0) {
						for (String ss : filenames) {
							//处理括弧(1)
							String sss = ss.replaceAll("\\(","\\\\\\(").replaceAll("\\)","\\\\\\)");
							s=s.replaceAll(sss, ZHONGWEN_PINYIN.get(ss));
							System.out.println(ss+"=="+ZHONGWEN_PINYIN.get(ss));
							System.out.println(s);
						}
					}
					sb.append(s);
					sb.append("\n");
				}
				write(file, sb.toString(), "UTF-8");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public static void main(String[] args) {
		String path_dir_html = "E:\\abc\\m\\pp";
		String path_dir_image = "E:\\abc\\m\\pp\\img";
		changeChinesePath(path_dir_image, path_dir_html);
	}
}

 

<audio controls="controls" style="display: none;"></audio>

分享到:
评论

相关推荐

    css批量图片路径替换

    在前端开发过程中,我们经常需要对CSS文件中的图片路径进行批量替换,特别是在迁移项目到新的服务器或者更改项目结构时。这个任务涉及到HTML、JS和CSS文件中的资源引用路径的更新,确保所有链接都能正确指向新的位置...

    一个不错的上传图片可以显示上传路径并且修改图片名称

    首先,我们需要理解标题和描述中提到的关键点:上传图片、显示上传路径以及修改图片名称。这些功能通常涉及到前端界面设计、后端服务器处理以及数据库存储。 1. **前端界面**: - 用户交互:在前端,我们需要提供...

    javaweb实际项目开发中上传文件图片的实现(代码)

    在JavaWeb实际项目开发中,上传文件和图片是一项常见的需求,尤其在构建用户交互丰富的网站时,例如用户头像上传、商品图片展示等。这里我们将深入探讨如何在JavaWeb环境中实现文件图片的上传功能,主要涉及到的技术...

    html相对路径问题及图片标签

    在HTML页面中,链接资源(如图片、CSS样式表、JavaScript文件等)时,我们可以使用绝对路径和相对路径。本文将深入探讨“html相对路径问题”以及如何在HTML中正确使用图片标签。 **1. HTML相对路径** 相对路径是相...

    .net百度编辑器图片路径修改为服务器路径

    综上所述,".net百度编辑器图片路径修改为服务器路径"这一需求涵盖的内容广泛,包括文件上传、服务器路径处理、图片处理、安全策略以及性能优化等多个方面。在实际开发中,需要结合具体的业务需求和技术栈来设计和...

    修改桌面文件默认保存路径

    在提供的文件列表中,“说明_Readme.html”可能是详细操作指南,而“SetProfilePath”可能是一个脚本或工具,用于自动化修改桌面文件保存路径的过程。如果使用这样的工具,务必先阅读Readme文件,了解其使用方法和...

    jspsmartupload上传文件工程路径中文无乱码

    在这个Eclipse工程实例中,我们将探讨如何使用`jspsmartupload`来实现文件和图片的上传,同时确保文件保存路径中的中文字符不会出现乱码问题。 首先,`jspsmartupload`库解决了文件上传过程中的一些常见问题,如...

    文件下载/保存路径弹出框

    描述中提到的“简单实用的文件路径选择框”,是指一种设计简洁、易于使用的界面元素,允许用户浏览和选择他们计算机上的文件夹或文件。它通常包含一个文本输入框显示当前选定的路径,以及一个按钮来打开一个文件...

    nexus中文路径问题

    在许多操作系统和编程环境中,尤其是旧版本或未正确配置的情况下,中文字符可能无法正确处理,尤其是在文件路径中。Nexus作为一款英文为主的工具,可能存在对非ASCII字符(如中文)支持不足的状况。这可能导致在创建...

    基于react项目打包css引用路径错误解决方案

    没有去修改create-react-app默认的配置文件 执行npm start 一切正常, 但是 npm run ...手动更改index.html的路径之后又报静态资源引入错误 报错 解决方案 解决: 在package.json下面增加”homepage”: “.”。

    Tomcat服务器图片地址中文路径问题解决办法

    当我们在HTML或者JSP文件中使用中文路径引用图片、链接或者其他资源时,如 `中文图片.jpg"&gt;` 或者 `中文.jsp"&gt;中文文件名&lt;/a&gt;`,或者在URL中直接使用中文路径,如 `http://127.0.0.1:8080/中文.扩展名`,可能会遇到...

    flying saucer的中文不显示问题(修改源码后重新打的jar包)

    在IT行业中,Flying Saucer是一个非常流行的库,它允许开发者将HTML内容转换为PDF、XPS等...通过修改源码并重新打包,我们可以定制一个支持中文的Flying Saucer版本,从而在各种项目中更顺利地处理中文内容的转换需求。

    Web项目设置的路径要求

    本文将围绕Web项目中的路径要求进行详细阐述,包括但不限于项目的目录结构、路径配置方式以及如何在不同环境中正确配置路径等。 #### 一、Web项目的基本目录结构 Web项目的目录结构通常包含以下几个关键部分: 1....

    如何解决java html转pdf图片不显示问题的源码范例(由浅入深代码范例和详细说明).docx

    ITextRenderer 的 setDocument() 方法接收 HTML 文件路径作为参数,将其加载到渲染器中。调用 layout() 方法布局页面,然后调用 createPDF() 方法将解析后的 HTML 内容写入到已打开的 PDF 文档中。最后,我们关闭...

    bat把目录下的文件按修改时间倒序列出来_生成超链接放到html文件中.zip

    本压缩包中的"bat把目录下的文件按修改时间倒序列出来_生成超链接放到html文件中.bat"文件就是一个批处理脚本,它的主要功能是将指定目录下的所有文件按照修改时间的倒序排列,并将这些文件的绝对路径转换为超链接,...

    web前端+css+html基础阶段小兔鲜项目+psd文件设计稿及项目源码

    在这个项目中,"源码"文件夹可能包含了HTML文件,这些文件使用各种标签来创建页面元素,如标题、段落、图像和链接。例如,`&lt;h1&gt;`用于大标题,`&lt;p&gt;`用于段落,`&lt;img&gt;`用于插入图片,`&lt;a&gt;`用于创建链接。理解并熟练...

    unigui_css引用路径

    - 内部样式表:将CSS放在`&lt;style&gt;`标签内,位于HTML文件的`&lt;head&gt;`部分,适用于小型项目或页面特定样式。 - 外部样式表:通过`&lt;link rel="stylesheet" type="text/css" href="path/to/your.css"&gt;`引入外部CSS文件...

    flyingsaucer转html为PDF(中文可用)

    在处理中文内容时,`Flyingsaucer`可能面临一些挑战,但通过正确的配置,我们可以使其成功地处理中文字符,而无需修改源代码。 `Flyingsaucer`的核心组件是`ITextRenderer`,它基于iText库来实现PDF生成。以下是...

    WEB 项目中JAVA取得WEBROOT物理路径

    获取Java Web项目中的WEBROOT或WEB-INF物理路径,是开发过程中的常见操作,通常通过Servlet API的`ServletContext`接口实现。理解Web应用的部署结构和正确使用`getRealPath()`方法,对于解决与文件操作相关的问题至...

    asp.NET结合js从数据库读取图片路径来实现滚动

    在图片滚动效果中,JavaScript会接收来自服务器的图片路径,然后动态地创建或修改HTML元素,以实现图片的平滑滚动。 在"leftright.aspx"和"topdown.aspx"这两个文件中,我们可能看到了两种不同方向的滚动实现:左右...

Global site tag (gtag.js) - Google Analytics