Java-XML解析器&;下载器
我正在创建一个应用程序,它将从我自己的web服务器下载大量文件。但是idk为什么它不起作用。它没有任何反应 这是我代码的一部分 下载程序.classJava-XML解析器&;下载器,java,Java,我正在创建一个应用程序,它将从我自己的web服务器下载大量文件。但是idk为什么它不起作用。它没有任何反应 这是我代码的一部分 下载程序.class private Proxy proxy = Proxy.NO_PROXY; public void downloadLibrary() { System.out.println("Start downloading libraries from server..."); try
private Proxy proxy = Proxy.NO_PROXY;
public void downloadLibrary()
{
System.out.println("Start downloading libraries from server...");
try
{
URL resourceUrl = new URL("http://www.example.com/libraries.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(resourceUrl.openConnection(proxy).getInputStream());
NodeList nodeLst = doc.getElementsByTagName("Contents");
for (int i = 0; i < nodeLst.getLength(); i++)
{
Node node = nodeLst.item(i);
if (node.getNodeType() == 1)
{
Element element = (Element)node;
String key = element.getElementsByTagName("Key").item(0).getChildNodes().item(0).getNodeValue();
File f = new File(launcher.getWorkingDirectory(), key);
downloadFile("http://www.example.com/" + key, f, "libraries");
}
}
}
catch(Exception e)
{
System.out.println("Error was found when trying to download libraries file " + e);
}
}
public void downloadFile(final String url, final File path, final String fileName)
{
SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>()
{
@Override
protected Void doInBackground() throws Exception
{
launcher.println("Downloading file " + fileName + "...");
try
{
URL fileURL = new URL(url);
ReadableByteChannel rbc = Channels.newChannel(fileURL.openStream());
FileOutputStream fos = new FileOutputStream(path);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
}
catch(Exception e)
{
System.out.println("Cannot download file : " + fileName + " " + e);
}
return null;
}
@Override
public void done()
{
System.out.println(fileName + " had downloaded sucessfully");
}
};
worker.execute();
}
private Proxy=Proxy.NO\u Proxy;
公共void下载库()
{
System.out.println(“开始从服务器下载库…”);
尝试
{
URL resourceUrl=新URL(“http://www.example.com/libraries.xml");
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
Document doc=db.parse(resourceUrl.openConnection(proxy.getInputStream());
NodeList nodeLst=doc.getElementsByTagName(“内容”);
对于(int i=0;i
这是我的xml文件(libraries.xml)的一部分
libraries/org/lwjgl/lwjgl/lwjgl/2.9.0/lwjgl-2.9.0.jar
我的想法是,我的应用程序将读取XML文件。然后它将从服务器下载文件并保存到计算机。例如,我的应用程序下载http://www.example.com/libraries/org/lwjgl/lwjgl/lwjgl/2.9.0/lwjgl-2.9.0.jar
然后它将保存到C://WorkingDir/libraries/org/lwjgl/lwjgl/lwjgl/2.9.0/lwjgl-2.9.0.jar
在我的XML文件中有大量的
,我必须下载所有这些
那有什么代码错了吗?感谢您的帮助。首先尝试通过某种类型的读取器直接使用到字符串的连接,然后您可以根据需要对其进行操作
package come.somecompany.somepackage.utils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class WebUtils {
/**
* Gets the HTML value of a website and
* returns as a string value.
*
* @param website website url to get.
* @param ssl True if website is SSL.
* @param useragent Specified User-Agent (empty string "" means use system default).
* @return String value of website.
*/
public String getHTML(String website, boolean ssl, String useragent) {
String html = "";
String temp;
String prefix;
if (ssl) {
prefix = "https://";
} else {
prefix = "http://";
}
try {
URL url = new URL(prefix + website);
URLConnection con = url.openConnection();
if (!(useragent.equalsIgnoreCase(""))) {
con.setRequestProperty("User-Agent", useragent);
}
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
while((temp = in.readLine()) != null) {
html += temp + "\n";
}
in.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return html;
}
}
另外,看起来您正在尝试使用XML模式解析HTML。。。这可能会给你带来困难。您可以尝试使用JSoup—它是一个java HTML解析器,工作非常好,非常简单:
它可能有助于消费网站上的文档,而无需构建自己的下载程序
更新--
尝试读入一个缓冲读取器
,也许您的程序没有收到完整的文档,缓冲读取器可能会有所帮助
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
第一种方法是:
public void downloadLibrary()
{
System.out.println("Start downloading libraries from server...");
try
{
URL resourceUrl = new URL("http://www.example.com/libraries.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
// change here
URLConnection con = resourceUrl.openConnection();
BufferedReader bfr = new BufferedReader(new InputStreamReader(con.getInputStream()));
String tempDoc = "";
String tempStr;
while (tempStr = bfr.readLine()) != null) {
tempDoc += tempStr + System.getProperty("line.separator");
}
Document doc = db.parse(tempDoc);
NodeList nodeLst = doc.getElementsByTagName("Contents");
for (int i = 0; i < nodeLst.getLength(); i++)
{
Node node = nodeLst.item(i);
if (node.getNodeType() == 1)
{
Element element = (Element)node;
String key = element.getElementsByTagName("Key").item(0).getChildNodes().item(0).getNodeValue();
File f = new File(launcher.getWorkingDirectory(), key);
downloadFile("http://www.example.com/" + key, f, "libraries");
}
}
}
catch(Exception e)
{
System.out.println("Error was found when trying to download libraries file " + e);
}
}
public void downloadLibrary()
{
System.out.println(“开始从服务器下载库…”);
尝试
{
URL resourceUrl=新URL(“http://www.example.com/libraries.xml");
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
//在这里换车
URLConnection con=resourceUrl.openConnection();
BufferedReader bfr=新的BufferedReader(新的InputStreamReader(con.getInputStream());
字符串tempDoc=“”;
字符串tempStr;
while(tempStr=bfr.readLine())!=null){
tempDoc+=tempStr+System.getProperty(“line.separator”);
}
Document doc=db.parse(tempDoc);
NodeList nodeLst=doc.getElementsByTagName(“内容”);
对于(int i=0;i
ahhh!你的Java中有C@蛇医你什么意思?哈哈,当然是开玩笑了。在java中,大多数情况下,你看到大括号{在同一行,而不是下一行。通常,当你看到下一行时,要么是学生(因为学者通常遵循下一行模式),要么是有C语言背景的人。不一定
public void downloadLibrary()
{
System.out.println("Start downloading libraries from server...");
try
{
URL resourceUrl = new URL("http://www.example.com/libraries.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
// change here
URLConnection con = resourceUrl.openConnection();
BufferedReader bfr = new BufferedReader(new InputStreamReader(con.getInputStream()));
String tempDoc = "";
String tempStr;
while (tempStr = bfr.readLine()) != null) {
tempDoc += tempStr + System.getProperty("line.separator");
}
Document doc = db.parse(tempDoc);
NodeList nodeLst = doc.getElementsByTagName("Contents");
for (int i = 0; i < nodeLst.getLength(); i++)
{
Node node = nodeLst.item(i);
if (node.getNodeType() == 1)
{
Element element = (Element)node;
String key = element.getElementsByTagName("Key").item(0).getChildNodes().item(0).getNodeValue();
File f = new File(launcher.getWorkingDirectory(), key);
downloadFile("http://www.example.com/" + key, f, "libraries");
}
}
}
catch(Exception e)
{
System.out.println("Error was found when trying to download libraries file " + e);
}
}