import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class ConvertMain {
/**
* @param args
*/
public static void main(String[] args) {
List<ResObj> resList = new ArrayList<ResObj>();
// TODO Auto-generated method stub
// public.xml路径
String publicXmlPath = "C:/androidStudioSpace/goal/public.xml";
Document doc = load(publicXmlPath);
Element root = doc.getRootElement();
//转换为资源对象
listNodes(root, resList);
//设值
SetVal(resList);
// java文件根目录
String comPath = "C:/androidStudioSpace/goal/com/";
File file=new File(comPath);
//处理文件
dealFile(file,resList);
}
public static void dealFile(File file,List<ResObj> resList)
{
File[] fileList= file.listFiles();
File temp;
ResObj resObj;
for(int i=0;i<fileList.length;i++)
{
temp=fileList[i];
if(temp.isDirectory())
{
// 递推处理子文件夹
dealFile(temp,resList);
}else
{
// 替换文件中对应的数字
String fileContent=readFile(temp);
for(int j=0;j<resList.size();j++)
{
resObj=resList.get(j);
if(resObj.getObjId()!=null&&resObj.getName()!=null&&resObj.getType()!=null)
{
if(fileContent.contains(resObj.getObjId()))
{
fileContent=fileContent.replace(resObj.getObjId(), resObj.getText());
}
}
}
writeFile(temp.getPath(),fileContent);
System.out.println("===替换文件:"+temp.getPath());
}
}
}
public static void writeFile(String fileName, String content)
{
try
{
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName), "utf-8"));
out.write(content);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static String readFile(File file)
{
StringBuffer localStringBuffer = new StringBuffer();
try {
FileInputStream localFileInputStream = null;
BufferedReader localBufferedReader = null;
localFileInputStream = new FileInputStream(file);
InputStreamReader localInputStreamReader = new InputStreamReader(localFileInputStream, "UTF-8");
localBufferedReader = new BufferedReader(localInputStreamReader);
String str;
while ((str = localBufferedReader.readLine()) != null) {
localStringBuffer.append(str);
localStringBuffer.append("\r\n");
}
localBufferedReader.close();
localInputStreamReader.close();
localFileInputStream.close();
} catch (Exception localException) {
}finally
{}
return localStringBuffer.toString();
}
public static void SetVal(List<ResObj> resList) {
for (int i = 0; i < resList.size(); i++) {
// public.xml读取的为16进制
String hexId = resList.get(i).getObjHexId();
if (!isEmpty(hexId) && hexId.length() > 2) {
hexId = hexId.substring(2);
resList.get(i).setObjId(Integer.parseInt(hexId, 16) + "");
// R.type.name
resList.get(i).setText("R." + resList.get(i).getType() + "." + resList.get(i).getName());
}
}
}
public static boolean isEmpty(String str) {
if (str == null)
return true;
return (str.trim().equals(""));
}
// 遍历当前节点下的所有节点
public static void listNodes(Element node, List<ResObj> resList) {
// System.out.println("当前节点的名称:" + node.getName());
// 首先获取当前节点的所有属性节点
List<Attribute> list = node.attributes();
// 遍历属性节点
ResObj resObj = new ResObj();
for (Attribute attribute : list) {
if ("type".equalsIgnoreCase(attribute.getName())) {
resObj.setType(attribute.getValue());
}
if ("name".equalsIgnoreCase(attribute.getName())) {
resObj.setName(attribute.getValue());
}
if ("id".equalsIgnoreCase(attribute.getName())) {
resObj.setObjHexId(attribute.getValue());
}
}
resList.add(resObj);
// 同时迭代当前节点下面的所有子节点
// 使用递归
Iterator<Element> iterator = node.elementIterator();
while (iterator.hasNext()) {
Element ele = iterator.next();
listNodes(ele, resList);
}
}
public static Document load(String filename) {
Document document = null;
try {
SAXReader reader = new SAXReader();
document = reader.read(new File(filename));
document.normalize();
} catch (Exception ex) {
ex.printStackTrace();
}
return document;
}
}