项目编码批量转换工具
来源:互联网 发布:中国联通无线上网 mac 编辑:程序博客网 时间:2024/06/07 05:45
用java实现的项目编码转换:
- 支持自动检测文件编码
- 支持指定文件后缀
支持Windows、Linux和Mac系统
比如:
java EncodingTransform D3Xmpp utf-8 .java .xml
对D3Xmpp目录下的.java 和 .xml文件转换编码为utf-8,其余文件则直接拷贝过去。程序执行完成后,会在D3Xmpp的同级目录生成D3Xmpp.编码转换, 里面包含了完整的转换编码后的项目文件。 以下是代码,其中编码检测用的大神Billows.Van的代码。完整代码链接
import java.io.*;import java.nio.file.*;import java.util.*;import java.net.URL;public class EncodingTransform { public static void main(String args[]) { String inputDir; String outputDir; String inputEncode; String outputEncode; String[] filters = new String[args.length - 2]; if(args.length < 3) { System.out.println("输入参数错误"); System.out.println("使用方法:"); System.out.println(" javac EncodingTransform.java"); System.out.println(" java EncodingTransform 输入目录 输出文件编码 要转换编码的文件后缀\n 文件后缀为.all时转换全部文件的编码"); System.out.println("比如:"); System.out.println(" java EncodingTransform Test/ utf-8 .all"); System.out.println(" 转换Test目录下的所有文件编码为utf-8"); return; } //参数判断 inputDir = new File(args[0]).getAbsolutePath(); outputDir = inputDir + ".编码转换"; if(inputDir.endsWith(File.pathSeparator)) { inputDir = inputDir.substring(0, inputDir.length() - 1); } outputEncode = args[1]; for(int i = 2; i < args.length; i++) { filters[i - 2] = args[i]; } System.out.println("输入路径:" + inputDir); System.out.println("输出路径:" + outputDir); System.out.println("输出文件编码:" + outputEncode); System.out.println("要过滤的文件:" + Arrays.asList(filters)); transfrom(inputDir, outputDir, outputEncode, filters); } /** * * 编码转换 * 输入文件, 输出文件,输入文件编码,输出文件编码 */ public static void transfrom(String inputDir, String outputDir, String outputEncode, String[] filters) { List<File> inputAllFiles = new ArrayList<>(); obtainFiles(new File(inputDir), inputAllFiles); for(File inputFile : inputAllFiles) { String outputFilePath = outputDir + inputFile.getPath().substring(inputDir.length()); File outputFile = new File(outputFilePath); //如果是目录则直接创建 if(inputFile.isDirectory()) { outputFile.mkdirs(); System.out.println("dir"); continue; } //使用EncodingDetect获取输入文件的编码 String inputEncode = EncodingDetect.getJavaEncode(inputFile.getAbsolutePath()); try { if( filterFile( inputFile.getName(), filters ) ) { copy(inputFile, outputFile, inputEncode, outputEncode); } else { //非目标文件直接拷贝 outputFile.getParentFile().mkdirs(); outputFile.createNewFile(); Files.copy(inputFile.toPath(), outputFile.toPath(), StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.COPY_ATTRIBUTES); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } /** * * 检查filename是否以filters数组的某一个字符串元素结尾, 确定该文件是否需要转换编码 * */ public static boolean filterFile(String filename, String filters[]) { for(int i = 0; i < filters.length; i++) { if(filename.endsWith(filters[i])) { return true; } } return false; } /** * *获取输入目录的所有文件 * */ public static void obtainFiles(File inputFile, List<File> list) { System.out.println(inputFile.getAbsolutePath()); if(inputFile.isFile()) { list.add(inputFile); return; } if(inputFile.isDirectory()) { File[] childFiles = inputFile.listFiles(); if(childFiles == null || childFiles.length == 0) { list.add(inputFile); return; } for(File file : inputFile.listFiles()) { obtainFiles(file, list); } } } /** * *转换inputFile的编码后保存到outputFile * */ public static void copy(File inputFile, File outputFile, String inputEncode, String outputEncode) throws IOException, FileNotFoundException{ InputStreamReader isr = null; OutputStreamWriter osr = null; outputFile.getParentFile().mkdirs(); outputFile.createNewFile(); isr = new InputStreamReader(new FileInputStream(inputFile), inputEncode); osr = new OutputStreamWriter(new FileOutputStream(outputFile), outputEncode); //每次读取1024字节 int readedLen = 0; char[] cache = new char[1024]; try { while((readedLen = isr.read(cache)) != -1) { osr.write(cache, 0, readedLen); osr.flush(); } } finally { isr.close(); osr.close(); } }}
0 0
- 项目编码批量转换工具
- C# Winform 文件编码批量转换工具
- FilesCodingConvert--批量文件编码格式转换工具
- 批量转换文本文件编码
- 批量转换文件编码
- 批量转换文件编码
- 编码批量转换
- 批量文件编码转换
- 代码编码批量转换
- 批量转换文档编码
- 批量转换编码
- 酷狗歌词Krc批量转换工具Lrc [附转换编码DLL]
- C#批量转换unicode编码
- php文件编码批量转换
- Linux批量转换文件名编码
- 批量转换文件编码_php
- Java批量转换文件编码
- python批量转换文件编码
- Coursera机器学习-第十周-Large Scale Machine Learning
- LeetCode-62-Unique Paths
- <Fragment>的生命周期
- 安卓fragment跳转activity,fragment跳转fragment,activity跳转fragment
- NodeJs常用链接整理
- 项目编码批量转换工具
- Largest Number
- HackerRank Fibonacci Modified
- LocalBroadcastManager的使用总结
- JAVA 生成二维码
- HackerRank Breadth First Search: Shortest Reach
- mysql 主从复制配置
- 音乐播放器——SoundManager API介绍
- leveldb源码阅读知识积累2