今天准备把原来写的多线程断点下载程序写成通用JAR文件的形式,但是要考虑用户已经下载没有下载完成的文件保存的保存,想了几种方式,一种是文本文件,考虑读写起来比较麻烦,要一行一行的全部读进来再分析,放弃;第二种是采用数据库,但是考虑到并不是所有的用户都喜欢这种方式,并且数据库还占空间较大,放弃;第三种方式就是采用XML方式,想到这种方式的移植性强,很多平台都支持,并且读写起来也是比较方便,所以就决定采用这种方式,以下是今天加前面的一点心得,包括了对 XML文件进行创建、查找、增加、删除、保存等操作,先放在这里,等以后有用的时候,再来取,
注,要运行下面程序,请先下载JDOM,并配好环境变量:
import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
import org.jdom.xpath.XPath;
/**
* 在该类中将动态的创建XML文件用以保存下载的文件名及路径
* 以便这些下载文件的断点续传功能可以使用
* 创建的XML文件格式如下:
* <?xml version="1.0" encoding="UTF-8" ?>
<downFile>
<File internetPath="http://www.123.com/xx.rar">
<localPath>c:\\tmp</localPath>
</File>
<File internetPath="http://www.123.com/xx2.rar">
<localPath>c:\\tmp0</localPath>
</File>
</downFile>
*/
public class FileDownInformationWithXML {
SAXBuilder builder;
Document document;
Element root;
String XMLFileName = "downFile.xml";
String fileAndPath; //XML文档的完整路径
/**
*
* @param Path 存放下载临时文件的路径
*/
public FileDownInformationWithXML(String Path) {
builder = new SAXBuilder();
this.fileAndPath = Path + XMLFileName;
if (checkXMLFileExist() == false) {
if (createXMLFile() == false) {
System.out.println("XML文件创建错误,请确认您是否有权限");
return;
}
}
try {
document = builder.build(fileAndPath);
} catch (Exception e) {
e.printStackTrace();
}
root = document.getRootElement();
//System.out.println("root:"+root.getName());
}
/**
* 返回根据网络地址得到的本地地址,这是在断点续传中使用
* 如果返null值,那么就说明该没有不存在下载列表中,就应该重新下载
*/
public String downFileExist(String internetAddress) {
String localPath = null;
XPath xPath; //查找id=1的是不是存在
try {
//下面是查找文件名及下载地址都相同的项
//xPath = XPath.newInstance("/downFile/File[@name='"+file+"']/internetPath[text()='"+internetAddress+"']");
xPath =
XPath.newInstance("//File[@internetPath='" + internetAddress +
"']");
List list = xPath.selectNodes(document);
if (list.size() == 1) {
Element e = (Element)list.get(0);
localPath = e.getChildText("localPath");
}
} catch (Exception e) {
e.printStackTrace();
}
return localPath;
}
/**
* 根据网络地址及本地地址,增加一个节点
*/
public void addOneDownRecord(String internetAddress, String localAddress) {
Element e = new Element("File");
root.addContent(e);
Attribute attribute = new Attribute("internetPath", internetAddress);
e.setAttribute(attribute);
Element e1 = new Element("localPath");
e1.setText(localAddress);
e.addContent(e1);
}
/**
* 根据网络地址删除一个节点
*/
public boolean removeOneDownRecord(String internetAddress) {
XPath xpath;
try {
xpath =
XPath.newInstance("//File[@internetPath='" + internetAddress +
"']");
List list = xpath.selectNodes(root);
if (list.size() == 1) {
Element e = (Element)list.get(0);
root.removeContent(e);
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 将更改的结果保存到磁盘
* @return
*/
public boolean saveChange() {
XMLOutputter out;
try {
out = new XMLOutputter();
out.output(root, new FileOutputStream(fileAndPath));
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public boolean saveChange(Document doc) {
XMLOutputter out;
try {
out = new XMLOutputter();
out.output(doc, new FileOutputStream(fileAndPath));
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
margin: 0cm 0cm
分享到:
相关推荐
在Java开发中,XML处理是常见的任务之一,...在提供的`jdomdemo`压缩包文件中,可能包含了一个或者多个示例程序,演示了如何使用JDOM和XPath进行XML处理。你可以解压并运行这些程序,以便更直观地理解它们的工作原理。
XPath是一种在XML文档中查找信息的语言,JDOM提供了Jaxen库来支持XPath。例如,以下代码演示了如何找到文档中的特定元素: ```java import org.jdom2.xpath.XPathExpression; import org.jdom2.xpath.XPathFactory;...
在这个例子中,我们将深入探讨如何使用JDOM解析XML文件,并进行遍历与构建。 首先,我们需要了解JDOM的基本概念。JDOM主要由三部分构成:SAXBuilder用于从XML源构建DOM树,Element代表XML文档的元素,Attribute代表...
### JDOM操作XML文件的关键知识点 #### 一、JDOM简介 JDOM(Java Document Object Model)是一种基于Java的XML解析API,它提供了一种简便的方式来解析和操作XML文档。与传统的DOM相比,JDOM更加注重性能和易用性,...
在Java编程中,JDOM库是一个流行的解析和操作XML的工具,它提供了对XPath的支持,使得我们可以方便地通过XPath表达式来读取XML文档的节点。 首先,理解XPath的基本语法是非常重要的。XPath表达式由路径表达式组成,...
JDOM库不仅提供了读取和创建XML的能力,还支持更复杂的操作,如查找、修改和删除XML元素。例如,你可以使用`XPath`表达式来定位特定的元素,或者通过`Element`类的方法来添加、删除或修改子元素和属性。 总的来说,...
在"Jdom 精简Demo"中,可能包含了使用JDOM2解析XML的示例代码,展示了如何创建Document对象、使用XPath选取节点以及对XML进行操作。而"项目结构+运行结果.jpg"文件则可能显示了项目的目录结构和运行后的结果,帮助...
**JDOM** 是一个专为Java设计的XML处理库,它提供了一种高效且便捷的方式来解析、创建、修改和序列化XML文档。JDOM通过利用Java语言的强大特性,如方法重载、集合和映射,将SAX和DOM的优点结合在一起,简化了XML处理...
- **灵活性**:JDOM支持XPath,可以方便地查找和操作XML文档中的任何部分。 - **完全Java实现**:无需依赖外部库,如DOM或SAX解析器,提高了平台的兼容性。 4. **注意事项** - JDOM不适用于处理非常大的XML文件...
本篇文章将详细介绍如何利用JDOM库在Java中实现XML的增删改查操作。 一、XML的基本结构与JDOM解析 XML文档由元素(Element)、属性(Attribute)、文本内容(Text)等组成。JDOM通过SAX和DOM两种方式解析XML文档。...
- **优化策略**:如果确实需要处理大型XML文件,可以使用JDOM的SAXBuilder,它允许以SAX方式读取XML,但仍然使用JDOM API进行操作。 6. **示例代码** ```java import org.jdom2.Document; import org.jdom2....
在"xpathDemo"这个项目中,开发者可能创建了一个XML文件,然后使用JDOM加载该文件,接着利用XPath执行一些查询,例如找出所有价格大于特定值的书籍,或者获取某个元素的所有子元素。这样的示例有助于理解如何在实际...
6. **保存XML**:最后,如果对XML进行了修改,可以使用`XMLOutputter`将其输出到文件或字符串。 ```java XMLOutputter xmlOutputter = new XMLOutputter(); String formattedXml = xmlOutputter.outputString...
本文将对JDOM和XML的解析进行详细介绍,并进行两者之间的比较。 **JDOM** JDOM(Java Document Object Model)是Java平台上的一个XML处理库,它提供了一种直接在Java对象层次上操作XML文档的方法。JDOM的主要优势...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在数据交换、配置文件、文档存储等领域。在Java中,解析XML有多种方法,其中之一就是使用JDOM库。JDOM,全称Java Document Object Model,是...
- **修改XML**:对`Element`、`Attribute`进行添加、删除或修改操作。 - **输出XML**:使用`XMLOutputter`将JDOM对象转换为XML字符串或写入文件。 - **查询XML**:利用XPath表达式选择XML文档中的特定节点。 在深入...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在数据交换、配置文件、文档存储等领域。本文将深入探讨XML文件的生成,并...通过熟悉其API和用法,可以有效地进行XML文件的创建、读取和修改。
- **构建XML**:JDOM允许动态构建XML文档,通过Element、Attribute等类创建XML结构。 - **查询XML**:JDOM支持XPath表达式,可以方便地查找XML文档中的节点。 - **序列化XML**:将XML对象转换回XML字符串,以便输出...
通过SAXBuilder或DOMBuilder解析XML,使用Element、Attribute和Text对象操作XML结构,借助XPath表达式进行高效查询,最后通过XMLOutputter将修改后的文档写回文件。这些知识点对于任何需要处理XML的Java开发者来说都...
此外,jdom4j还支持XPath查询,使得查找和操作XML文档中的特定元素变得非常容易。 ### 总结 通过上述代码实例,我们可以看到jdom4j在处理复杂组织结构树时的强大能力。从创建文档、构建树结构到最终写入文件,每...