2012-03-19 52 views
0

我试图从以下网址下载一个JSON本地文件 - http://api.crunchbase.com/v/1/companies.js - 到本地文件。我使用Java 1.7和以下JSON库 - http://www.json.org/java/ - 试图使其工作。下载大JSON文件使用Java

这里是我的代码:

public static void download(String address, String localFileName) { 
      OutputStream out = null; 
      URLConnection conn = null; 
      InputStream in = null; 
      try { 
        URL url = new URL(address); 
        out = new BufferedOutputStream(
          new FileOutputStream(localFileName)); 
        conn = url.openConnection(); 
        in = conn.getInputStream(); 
        byte[] buffer = new byte[1024]; 
        int numRead; 
        long numWritten = 0; 
        while ((numRead = in.read(buffer)) != -1) 
        { 
          out.write(buffer, 0, numRead); 
          numWritten += numRead; 
          System.out.println(buffer.length); 
          System.out.println(" " + buffer.hashCode()); 
        } 
        System.out.println(localFileName + "\t" + numWritten); 
      } catch (Exception exception) { 
        exception.printStackTrace(); 
      } finally { 
        try { 
          if (in != null) { 
            in.close(); 
          } 
          if (out != null) { 
            out.close(); 
          } 
        } catch (IOException ioe) { 
        } 
      } 
    } 

当我运行代码的一切似乎直到中途循环程序似乎停止,而不是继续阅读JSON对象的工作。

有谁知道为什么会停止阅读?我该如何解决这个问题?

+0

解释你的意思是“似乎停止”。究竟发生了什么? – 2012-03-19 23:24:16

+0

我在代码中看不到任何明显的错误,只是运行它。它工作正常..大约40秒后,整个文件被复制。 – Vossi 2012-03-19 23:30:42

+0

当我打印出输入流,因为它涉及它其通常中途停止通过... 这里是流的局部输出.... {“名称”:“调制解调器介质”, “永久“:”modemmedia“}, {”name“:”Digitas“, ”permalink“:”digitas“}, {”name“:”Webshots“, ”permalink“:”webshots“}, { name“:”LimeLife“, ”permalink“:”limelife“}, {”name“:”Advertising.com“, ”permalink“:”advertising-com“}, {”name“:”CTS Media “,<----结束并且程序没有完成。 – user1279675 2012-03-19 23:40:19

回答

0

试试这个:

public void saveUrl(String filename, String urlString) throws MalformedURLException, IOException 
    { 
     BufferedInputStream in = null; 
     FileOutputStream fout = null; 
     try 
     { 
       in = new BufferedInputStream(new URL(urlString).openStream()); 
       fout = new FileOutputStream(filename); 

       byte data[] = new byte[1024]; 
       int count; 
       while ((count = in.read(data, 0, 1024)) != -1) 
       { 
         fout.write(data, 0, count); 
       } 
     } 
     finally 
     { 
       if (in != null) 
         in.close(); 
       if (fout != null) 
         fout.close(); 
     } 
    } 
+0

这与他现有的代码基本相同。 – 2012-03-19 23:28:29

0

有谁知道为什么会停止阅读?我该如何解决这个问题?

我看不出客户端代码有什么明显的错误。在没有客户端上的任何其他证据,我想看看服务器端的日志,看看是否有任何线索那里。

IMO,最可能的解释是下列之一:

  • 有在正在生成JSON服务器端代码中的错误,并导致崩溃一半。

  • 服务器(或代理/反向代理)具有上允许的交互的一些部分时的超时,并且该特定的请求的时间过长。