您的位置:首页 > 编程语言 > Java开发

带参数的可执行jar包程序实现从指定位置读取xml并解析指定字段

2014-12-23 13:54 501 查看
1、需求描述:有一批包含表DDL信息的xml文件,结构相同,希望迅速读取其中的表结构信息

2、执行环境:Linux/UNIX

3、实现思路:新建一个java工程,主函数设置两个入参,一个是文件路径,一个是包含表结构信息的节点属性名,java程序执行的时候带上入参,直接将解析后的结果用字符串的方式打印出来

4、xml文件格式参考:

<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="table_bas">
<property name="db2TabName">
<value>SOR.LDAPD_YIXIN_MSG</value>
</property>
<property name="oracleDDL">
<value>(
CLNDR_DT_ID number(10),
STD_PRVNCE_CD varchar2(20),
CITY_ID varchar2(20),
PD_INST_ID varchar2(50),
COL_DATE varchar2(20),
COL_UID number(10),
COL_PHONE varchar2(40),
COL_OS varchar2(20),
COL_CARRIER varchar2(20),
COL_COUNTRY varchar2(100),
COL_PROVINCE varchar2(50),
COL_CITY varchar2(100),
COL_FEED number(19),
COL_VOICELEFT number(19),
COL_VLDURATION number(19),
COL_TEXT number(19),
COL_AUDIO number(19),
COL_VIDEO number(19),
COL_IMAGE number(19),
COL_LBS number(19),
COL_CARD number(19),
COL_EMOTION number(19),
COL_MUSIC number(19),
COL_SMS number(19),
COL_NAT_CALL number(19),
COL_NEW_TEAMS number(10),
COL_READFC number(5),
COL_LOGIN_CNT number(19),
FILE_CLNDR_DT_ID number(10),
CRTD_TMST date,
WORK_DT date
)</value>
</property>
<property name="dataFileSeqList">
<value>1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63</value>
</property>
</bean>
</beans>
5、java代码参考:(需要在工程属性--Java Build Path--Libraries中引入外部jar包jdom.jar)

import java.io.File;
import java.io.IOException;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

public class TableDDLByXml
{
public static void main(String args[]) throws JDOMException, IOException
{
SAXBuilder builder = new SAXBuilder(false);
String path = args[0];//文件路径+文件名
Document doc = (Document) builder.build(new File(path));
Element root = doc.getRootElement();
List<Element> list = root.getChildren();//root:beans
for (Element i : list)//beans的所有子元素bean
{
List<Element> element = i.getChildren();//bean的所有子元素property
for (Element property : element)
{
//获取name属性值
String name = property.getAttributeValue("name");
if (name.equals(args[1]))//oracleDDL或commentDDL
{
//获取子元素capacity文本值
String value = property.getChildText("value");
System.out.println(value);
}
}
}
}
}
6、打jar包:要打成可执行jar包,低版本的eclipse可能没有这个功能。

在工程上右键--export,选择Runnable JAR file,而不是JAR file,如下图,点击下一步:



本地run的时候会有执行的配置信息,在下一步的界面中可以直接选择这个配置,里面包含了指定主函数所在的java类。对于要输入参数的main方法,在配置run的信息时,把参数写在Program arguments中,多个参数用空格隔开。下一步的配置界面如下图:



Library handling就是专门处理引用的外部jar包的,三个选项的含义如下:

1)Extract required libraries into generated JAR:将所有用到的class文件(包括自己写的和第三方包里的),打成一个jar包,第三方的在新打的jar包中直接以class方式存放

2)Package required libraries into generated JAR:将自己写的class文件打成一个jar包,把第三方jar包原封不动的打进这个新jar包里,第三方jar包的class要经过两次解压才能看到,这种方式下的第三方jar包对jvm不可见,eclipse通过特殊方式访问。

3)Copy required libraries into a sub-folder next to the generated JAR:将自己写的class文件打成一个jar包,将第三方jar包放到旁边的一个子文件夹。

一般选第一项就可以了,然后点击finish,打包完成。

7、在Linux上的执行方式参考:

如果把打的jar包和xml文件放在同一个目录下,且jar的可执行权限是开放的,就可以用下面的脚本直接执行:

java -jar ./TableBas.jar SOR.LDAPD_YIXIN_MSG.20141221.M.xml oracleDDL

jar包文件后面的第一个参数是xml文件名,第二个参数是表结构信息的节点属性名,执行以后表结构就直接打印出来啦。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  xml jar eclipse java
相关文章推荐