更改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>

猜你喜欢

转载自itace.iteye.com/blog/2413107