用于下载露天内容的Java代码

时间:2013-01-07 13:17:34

标签: alfresco alfresco-share

我使用以下代码下载大小为51kb的露天HTML内容

    HttpGet httpget = new HttpGet(url);
    System.out.println("executing request" + httpget.getRequestLine());
    HttpResponse response = httpclient.execute(httpget);
    HttpEntity entity = response.getEntity();
    System.out.println("----------------------------------------");
    System.out.println(response.getStatusLine());
    System.out.println("----------------------------------------");
    if (entity != null) {
        System.out.println("Response content type: " + entity.getContentType());
        long contentLength = entity.getContentLength();
        System.out.println("Response content length: "+ entity.getContentLength());
        if (contentLength > 0) {
            b = new byte[(int) contentLength];
            entity.getContent().read(b);
            content=new String(b);
            content=content.replace("\n", "").replace("\r", "");
            //content = StringEscapeUtils.escapeHtml(content);
            System.out.println("Response content: " + content);
        }
     }

只下载并显示30-40%的HTML内容。我无法获得完整的内容。

我尝试增加b的字节大小。但没有什么能帮助我。

请帮我用java代码下载alfresco内容。任何帮助表示赞赏。提前谢谢。

1 个答案:

答案 0 :(得分:2)

读取InputStream并不总是返回整个内容。您需要在循环中读取InputStream并写入缓冲区的正确偏移量,并根据read()的返回值递增偏移量。例如:

byte[] b = new byte[(int)contentLength];
int offset = 0;
while(offset < contentLength) {
    offset += inputStream.read(b, offset, b.length - offset);
}
String content = new String(b); // Or specify encoding.

或者您可以使用像Apache Commons IO这样的库。那就是:

IOUtils.toString(entity.getContent(), encoding);