java最难学的就是角落的东东了,不愧叫做java平台。搜索了一把总算明白了。
直接运行 .class的方法 java -cp . com.network.Chat , 不用加.class后缀
从eclipse中export 的jar file,仅仅是把.class打包了。所以执行这种jar file需要用 java -cp .;ch04.jar com.thnkjava.ch04, 如果你还应用到另外的lib库,你必须在cp里说明,也就是 java -cp .;ch04.jar;lib01.jar;lib02.jar com.thnkjava.ch04 来执行。事实上可以发现ch04.jar也在cp里面,说明ch04.jar就是lib库,最后的参数指明了要被执行的类名。
如果从eclipse里export出的是 runnable jar file,那么个执行这个jar包的时候是不需要指明哪个类的,直接这样执行 java -jar ch04.jar。原因就是jar包中的MANIFEST.MF内容不同。 runnable jar包中指明哪个类先执行,所以你可以用 java -jar ch04.jar来执行你想要执行的代码,而不必指明具体哪个类。这个你可以打开 jar包查看MANIFEST.MF的区别,一目了然。
生成runnable jar file时,有两个选项,Extract required libraries into generated JAR 和 package equired libraries into generated JAR。 前者是把你用到的.class 文件提取出来,后者则是把你所需要的所有jar包都打进一个包里。两者的MANIFEST.MF文件内容也有所不同,这应该是eclipse造成的,IDE 做了自己的事情,具体就不研究了。
http://docs.oracle.com/javase/tutorial/deployment/jar/appman.html
怎么打jar包 jar怎么运行
一、怎么打jar包
第一步:选中要打jar包的工程
第二步:鼠标右击,选择Export...
第三步:选择java中的Runnable JAR file(如图)
点击“Next”
第四步:(1)在Launch configuration:选择要打jar包的mian所在的类名;(如图)
(2)在Export destination:选择要存放jar的名称和地址(如图)
(3)如果要打的jar包需要调用别的jar包 请选择Library handling:中copy required libraries into a sub-folder next to the generated JAR(如图)
第五步:点击 “Finish”
二、运行 jar 方法
(1)cmd
(2)java -jar 盘:\文件名\XXXX.jar
评论
* 遍历目录
*
* @param directoryPath
*/
public static void read(String txtPath, String xmlPath) {
File dir = new File(txtPath);
File[] files = dir.listFiles();
if (files == null) {
return;
} else {
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
read(files[i].getAbsolutePath(), xmlPath);
} else {
// read file
readfile2Xml(files[i].getAbsolutePath(), xmlPath);
}
}
}
}
/**
* start()
*
* @param txtPath
* @param xmlPath
* @throws FileNotFoundException
* @throws IOException
*/
private static void start(String txtPath, String xmlPath)
throws FileNotFoundException, IOException {
// 创建XML
bulidXmlDoc(xmlPath);
// 遍历
read(txtPath, xmlPath);
}
public static void main(String[] args) throws FileNotFoundException,
IOException {
// start(args[0], args[1]);
start("F:\\works\\updown\\functions",
"F:\\works\\Java\\workspace\\txtfmtxml\\txtfmtxml.xml");
}
}
* 读取文件 每行生成一个Element
*
* @param file
*/
private static void readfile2Xml(String file, String xmlPath) {
String fileName = file.substring(file.lastIndexOf("\\") + 1, file
.lastIndexOf("."));
String[] func = null;
String funcName = null;
String funcSize = null;
InputStreamReader read = null;
BufferedReader reader = null;
counts = 0;
sizes = 0;
try {
// 添加summary
addSummary(fileName, xmlPath);
// 添加detail
addElement(fileName, null, null, xmlPath);
read = new InputStreamReader(new FileInputStream(file), "GBK");
reader = new BufferedReader(read);
String line = null;
while ((line = reader.readLine()) != null) {
if ("".equals(line)) {
continue;
}
counts++;
func = line.split(" ");
funcName = null;
funcSize = null;
for (String str : func) {
if (str.length() != 0) {
if (funcName == null) {
funcName = str;
} else {
funcSize = str;
break;
}
}
}
if (funcSize == null) {
funcSize = "0";
}
sizes += Integer.parseInt(funcSize);
// 添加func
addElement(fileName, funcName, funcSize, xmlPath);
}
// 修改count
editCount("//summary/module[@name='" + fileName + "']/count", null,
counts, xmlPath);
editCount("//summary/module[@name='" + fileName + "']/size", null,
sizes, xmlPath);
editCount("//detail/module[@name='" + fileName + "']", "count",
counts, xmlPath);
editCount("//detail/module[@name='" + fileName + "']", "size",
sizes, xmlPath);
reader.close();
read.close();
} catch (Exception e) {
e.printStackTrace();
try {
reader.close();
read.close();
} catch (IOException e1) {
}
}
}
* 添加Summary
*
* @param moduleName
* @param countTotal
* @throws IOException
* @throws JDOMException
*/
private static void addSummary(String moduleName, String xmlPath)
throws JDOMException, IOException {
SAXBuilder build = new SAXBuilder();
// 获得文档对象
Document doc = build.build(xmlPath);
XPath xpath = XPath.newInstance("//summary");
List list = xpath.selectNodes(doc);
Element summary = (Element) list.get(0);
Element module = new Element("module");
module.setAttribute("name", moduleName);
Element count = new Element("count");
count.setText(counts.toString());
Element size = new Element("size");
size.setText(sizes.toString());
module.addContent(count);
module.addContent(size);
summary.addContent(module);
// 文件处理
output(doc, xmlPath);
}
/**
* 修改counts、sizes
* @param Xpath
* @param attribute
* @param total
* @param xmlPath
* @throws FileNotFoundException
* @throws IOException
* @throws JDOMException
*/
private static void editCount(String Xpath, String attribute,
Integer total, String xmlPath) throws FileNotFoundException,
IOException, JDOMException {
SAXBuilder build = new SAXBuilder();
// 获得文档对象
Document doc = build.build(xmlPath);
// 获得根节点
Element element = null;
// 添加子元素func
XPath xpath = XPath.newInstance(Xpath);
List list = xpath.selectNodes(doc);
if (list.size() == 1) {
element = (Element) list.get(0);
if (Xpath.contains("summary")) {
element.setText(total.toString());
} else {
element.setAttribute(attribute, total.toString());
}
}
// 文件处理
output(doc, xmlPath);
}
* 文件处理
*
* @param doc
* @throws IOException
* @throws FileNotFoundException
*/
private static void output(Document doc, String xmlPath)
throws FileNotFoundException, IOException {
// 格式化并输出
Format format = Format.getPrettyFormat();
XMLOutputter out = new XMLOutputter(format);
out.output(doc, new FileOutputStream(xmlPath));
}
/**
* 添加detail
*
* @param line
* @throws IOException
* @throws JDOMException
*/
public static void addElement(String moduleName, String funcName,
String funcSize, String xmlPath) throws JDOMException, IOException {
SAXBuilder build = new SAXBuilder();
// 获得文档对象
Document doc = build.build(xmlPath);
XPath xpdetail = XPath.newInstance("//detail");
List listDetail = xpdetail.selectNodes(doc);
Element detail = (Element) listDetail.get(0);
Element module = null;
if (funcName == null) {
// 添加父元素 module
module = new Element("module");
module.setAttribute("name", moduleName);
module.setAttribute("count", counts.toString());
module.setAttribute("size", sizes.toString());
detail.addContent(module);
} else {
// 添加子元素func
XPath xpmodule = XPath.newInstance("//detail/module[@name='"
+ moduleName + "']");
List list = xpmodule.selectNodes(doc);
if (list.size() == 1) {
module = (Element) list.get(0);
Element func = new Element("func");
func.setAttribute("name", funcName);
func.setAttribute("size", funcSize);
module.addContent(func);
}
}
// 文件处理
output(doc, xmlPath);
}
// 模块包含的函数个数
private static Integer counts = 0;
// 模块所包含函数的大小
private static Integer sizes = 0;
/**
* 创建XML
*
* @throws FileNotFoundException
* @throws IOException
*/
public static void bulidXmlDoc(String xmlPath)
throws FileNotFoundException, IOException {
// 创建根节点
Element root = new Element("root");
Element elementSummary = new Element("summary");
Element elementDetail = new Element("detail");
root.addContent(elementSummary);
root.addContent(elementDetail);
// 根节点添加到文档中
Document doc = new Document(root);
// 文件处理
output(doc, xmlPath);
}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.jdom.xpath.XPath;
/**
*
*请提供jaxen.jar(XPath要用到)、jdom.jar
**/