Я писал из виджета приложения во внутреннюю и внешнюю память Android со следующим кодом:
URL adr = new URL(cleanUrl);
HttpURLConnection urlConnection = (HttpURLConnection) adr.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.setReadTimeout(5000);
urlConnection.connect();
File file = new File(path, name);
FileOutputStream fileOutput = new FileOutputStream(file);
InputStream inputStream = urlConnection.getInputStream();
byte[] buffer = new byte[1024];
int bufferLength = 0;
while ( (bufferLength = inputStream.read(buffer)) > 0 ) {
fileOutput.write(buffer, 0, bufferLength);
}
fileOutput.flush();
fileOutput.close();
Где путь был и:
path = mContext.getFilesDir();
или
path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
и
path.mkdirs();
В обоих случаях у меня есть FileNotFoundException и создан файл нулевой длины.
Мне удалось записать в оба типа памяти Android с помощью следующей функции:
protected InputStream get(String url) throws ClientProtocolException, IOException {
final HttpClient client = new DefaultHttpClient();
HttpGet getRequest = new HttpGet(url);
HttpResponse response = client.execute(getRequest);
if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
return null;
}
final HttpEntity entity = response.getEntity();
if (entity != null) {
try {
return entity.getContent();
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
и следующего использования:
File file = new File(path, name);
FileOutputStream fileOutput = new FileOutputStream(file);
InputStream inputStream = get(cleanUrl);
byte[] buffer = new byte[1024];
int bufferLength = 0;
while ( (bufferLength = inputStream.read(buffer)) > 0 ) {
fileOutput.write(buffer, 0, bufferLength);
}
fileOutput.flush();
fileOutput.close();