将JPEG从HttpResponse写入Java / Android文件

时间:2014-01-07 14:05:20

标签: java android inputstream httpresponse outputstream

我无法将http文件中的.jpg文件写入Android设备的文件系统。我使用这段代码:

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;

public void processResult(HttpResponse response) {

    if(response.getStatusLine().getStatusCode() != 401){

        if(response != null){
            File file = new File(parent, myLocation);
            try {
               file.getParentFile().mkdirs();
               file.createNewFile();
               HttpEntity entity = response.getEntity();
               FileOutputStream fileOS  = new FileOutputStream(file);
               entity.writeTo(fileOS);
               entity.consumeContent();
               fileOS.flush();
               fileOS.close();
               success  =   true;
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }                   
        }
    }
}

jpg文件是73369字节。如果我在success = true行停止调试器,我可以看到entity.getContentLength()为73369,这是正确的。但是,file.length()在大多数情况下给我0,有时7770或某个大小介于两者之间。

如果我在文件资源管理器上检查Android设备,则显示的长度为7 KB或更短。

我尝试了其他方法来处理InputStream,但没有成功:

我尝试获取一个字节数组并将其写入文件,但这给了我一个空的字节数组:

private static void writeToFile(File file, byte[] bs) throws IOException{
       file.getParentFile().mkdirs();
       file.createNewFile();

       FileOutputStream fileOS  = new FileOutputStream(file);
       fileOS.write(bs);
       fileOS.flush();
       fileOS.close();
}

我开始尝试将输入流写入文件,但这给出了相同的结果

public static final void streamToFile(File file, InputStream stream) throws IOException {
   file.createNewFile();

   FileOutputStream fileOS  = new FileOutputStream(file);

   byte[] buffer = new byte[1024];
   int bytesRead;      

   while ((bytesRead = stream.read(buffer)) != -1)
    {
       fileOS.write(buffer, 0, bytesRead);
    }
    stream.close();
    fileOS.flush();
    fileOS.close();
}

输入流似乎很好,但我无法将其放入文件中。有人帮忙吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

上面显示的代码是正确的。问题是在读完流之前连接已关闭。忽略了因为获取字符串请求(JSON)很好(响应大小很小)。