我无法将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();
}
输入流似乎很好,但我无法将其放入文件中。有人帮忙吗?
谢谢!
答案 0 :(得分:0)
上面显示的代码是正确的。问题是在读完流之前连接已关闭。忽略了因为获取字符串请求(JSON)很好(响应大小很小)。