使用Java从URL下载XML / RDF文件

时间:2012-03-03 17:38:38

标签: xml rdf

我无法从URL轻松下载XML文件。我已经浏览了这个网站已经有一段时间了,并且大部分示例都是关于如何使用正确的编码下载文件,据我所知,但是我必须做错了,因为我没有得到所需的输出。目前我的代码看起来像这样。

            Catalog cat = (Catalog)obj;

            String datasetURL = cat.getID()+"@datasets";

            URL dataURL = new URL(datasetURL);

            InputStream iStream = dataURL.openStream();

            int count = iStream.available();
            char content[] = new char[count];

            InputStreamReader isReader = new InputStreamReader(iStream,"UTF-8");

            BufferedReader buffRead = new BufferedReader(isReader);

            buffRead.read(content, 0, count);

            String contentAsString = new String(content, 0,count);

            FileWriter fstream = new FileWriter("src/main/resources/datasets.xml");
            BufferedWriter out = new BufferedWriter(fstream);

            out.write(contentAsString);
            out.close();

这似乎工作正常,但xml文件显示如下字符: Eclipse中的 Ksǵ p 等在记事本++中显示为�KsÇμ���Žp�。我不知道该怎么做因为我已经将编码添加到InputStreamReader所以我认为这将解决这个问题。

我也不太熟悉RDF,但xml文件中有一个RDF标记。那会有什么不同吗?

<?xml version='1.0' encoding='UTF-8'?>
<r:RDF xmlns:s="http://www.w3.org/TR/1999/PR-rdf-schema-19990303#"   xmlns:r="http://www.w3.org/1999/02/22-rdf-syntax-ns#" etc.. 

非常感谢。

2 个答案:

答案 0 :(得分:3)

您没有为字符串的构造函数提供charset

您可能想查看Guava,它有一些很好的实用程序,可以读取文件和URL的内容等等。

如果您打算使用RDF,我建议您尝试使用SesameJena

答案 1 :(得分:0)

我发现问题实际上是因为文件被压缩了!这是我现在使用的代码已经成功下载了该文件。

            Catalog cat = (Catalog)obj; 

            indexName += "."+cat.getInternalID();

            String datasetURL = cat.getID()+"@datasets";

            URL dataURL = new URL(datasetURL);

            URLConnection conn = dataURL.openConnection();

            String encoding = conn.getContentEncoding();

            InputStream is = encoding.equals("gzip")? new GZIPInputStream(conn.getInputStream()) : conn.getInputStream();

            BufferedReader in = new BufferedReader(new InputStreamReader(is));

            String inputLine;

            while ((inputLine = in.readLine()) != null)
                System.out.println(inputLine);

            in.close();

希望这可以帮助那些可能遇到类似问题的人。