Android – сохранить входной поток в файл

Я извлекаю XML-канал из URL-адреса и затем разбираю его. То, что мне нужно сделать, это также хранить это внутри телефона, чтобы при отсутствии подключения к Интернету он мог анализировать сохраненный вариант, а не живой.

Проблема, с которой я сталкиваюсь, заключается в том, что я могу создать объект url, использовать getInputStream для получения содержимого, но он не позволит мне его сохранить.

URL url = null; InputStream inputStreamReader = null; XmlPullParser xpp = null; url = new URL("http://*********"); inputStreamReader = getInputStream(url); ObjectOutput out = new ObjectOutputStream(new FileOutputStream(new File(getCacheDir(),"")+"cacheFileAppeal.srl")); //-------------------------------------------------------- //This line is where it is erroring. //-------------------------------------------------------- out.writeObject( inputStreamReader ); //-------------------------------------------------------- out.close(); 

Любые идеи о том, как я могу сэкономить поток ввода, чтобы я мог загрузить его позже.

ура

Solutions Collecting From Web of "Android – сохранить входной поток в файл"

Вот он, input – ваш inputStreamReader . Затем используйте тот же файл (имя) и FileInputStream чтобы читать данные в будущем.

 try { File file = new File(getCacheDir(), "cacheFileAppeal.srl"); OutputStream output = new FileOutputStream(file); try { try { byte[] buffer = new byte[4 * 1024]; // or other buffer size int read; while ((read = input.read(buffer)) != -1) { output.write(buffer, 0, read); } output.flush(); } finally { output.close(); } } catch (Exception e) { e.printStackTrace(); // handle exception, define IOException and others } } finally { input.close(); } 

Простая функция

Попробуйте эту простую функцию, чтобы аккуратно ее обернуть:

 // Copy an InputStream to a File. // private void copyInputStreamToFile(InputStream in, File file) { OutputStream out = null; try { out = new FileOutputStream(file); byte[] buf = new byte[1024]; int len; while((len=in.read(buf))>0){ out.write(buf,0,len); } } catch (Exception e) { e.printStackTrace(); } finally { // Ensure that the InputStreams are closed even if there's an exception. try { if ( out != null ) { out.close(); } // If you want to close the "in" InputStream yourself then remove this // from here but ensure that you close it yourself eventually. in.close(); } catch ( IOException e ) { e.printStackTrace(); } } } в // Copy an InputStream to a File. // private void copyInputStreamToFile(InputStream in, File file) { OutputStream out = null; try { out = new FileOutputStream(file); byte[] buf = new byte[1024]; int len; while((len=in.read(buf))>0){ out.write(buf,0,len); } } catch (Exception e) { e.printStackTrace(); } finally { // Ensure that the InputStreams are closed even if there's an exception. try { if ( out != null ) { out.close(); } // If you want to close the "in" InputStream yourself then remove this // from here but ensure that you close it yourself eventually. in.close(); } catch ( IOException e ) { e.printStackTrace(); } } } 

Спасибо Иордании Лаприз и его ответ .

Более короткая версия:

 OutputStream out = new FileOutputStream(file); fos.write(IOUtils.read(in)); out.close(); in.close();