2012-03-03 41 views
2

我无法从URL做一个XML文件的一个简单的下载URL的XML/RDF文件。我已经查看了一下这个网站已经有一段时间了,并且遵循了大多数关于如何使用正确的编码下载文件的例子,但是我必须做一些错误的事情,因为我没有获得所需的输出。目前我的代码看起来像这样。从下载使用Java

  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文件是这样显示的字符才能正常工作: Ksǵp等在Eclipse和�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.. 

非常感谢。

回答

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(); 

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

3

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

你可能想看看Guava,它有一些很不错的工具,用于在文件和URL,除其他事项外的内容阅读。

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

+0

谢谢你的回答迈克尔,那些是一些非常好的资源,我很感谢你的帮助。 – decal 2012-03-07 16:13:23