无法使用java代码将文件从一个地方传输到另一个地方

时间:2011-03-09 15:36:21

标签: java httpclient

我正在使用如下所示:

HttpClient httpclient = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet(targerFile);
    HttpResponse response = httpclient.execute(httpGet);

    // get the response body as an array of bytes
    HttpEntity entity = response.getEntity();

    // write for the destination file

    InputStream instream = null;
    if (entity != null) {
        instream = entity.getContent();

        ByteArrayOutputStream bytOut = new ByteArrayOutputStream();
        int x;
        do {
            x = instream.read();
            if (x != -1) {

                bytOut.write(x);
                instream.close();
                bytOut.close();
            }
        } while (x != -1);
        FileOutputStream fout = new FileOutputStream(destinationFile);
        fout.write(bytOut.toByteArray());
        fout.close();

但只有在那时我才发现来自httpclient的输入流已关闭。所以我无法多次阅读它。这有什么工作吗?或者这不是正确的方法吗?

4 个答案:

答案 0 :(得分:4)

使用org.apache.http.util.EntityUtils:

byte[] data = EntityUtils.toByteArray(response.getEntity());
httpClient.getConnectionManager().shutdown();

将该bytearray写入来自commons-io:

的FileUtils文件
FileUtils.writeByteArrayToFile(destinationFile, data);

答案 1 :(得分:2)

不要关闭循环内的流。在读取整个输入流之后在循环外执行此操作。

答案 2 :(得分:0)

在我看来,就像你在读取1个字节后关闭你的bytOut流一样。但我会做这样的事情:

String line;
BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent()));
PrintWriter pw = new PrintWriter(new FileOutputStream(destinationFile));
while ((line = reader.readLine()) != null) pw.println(line);
pw.close();
reader.close();

答案 3 :(得分:0)

首先,您的问题是您在读取第一个字节后关闭循环中的输入流。不要那样做。

其次,如果您要做的只是将其写入ByteArrayOutputStream,那么写FileOutputStream是没有意义的。直接写入文件。

第三,使用byte[]BufferedInputStream以及BufferedOutputStream,这样您就可以一次读取更多字节。

第四,忽略上述内容,只使用commons-io