میخوام ی دانلودر که فایلی رو از ادرسی دریافت و در حافظه با نام و فرمت فایل خودش ذخیره کنم اما نمیدونم چکار باید بکنم!!!
من از این کد برای دریافت و ذخیره استفاده میکنم اما مشکل اینجاست ک با اسم و فرمتی ک بطور پیش فرض نوشته شده ذخیرهمیشه ، من میخام همانطور ک ادرس رو از متغییر میگیره ، نام و فرمت رو هم بگیره
کد پیاچپی:
private class DownloadTask extends AsyncTask < String , Integer , String > { private Context context ; public DownloadTask ( Context context ) { this . context = context ; } @ Override protected String doInBackground ( String ... sUrl ) { // take CPU lock to prevent CPU from going off if the user // presses the power button during download PowerManager pm = ( PowerManager ) context . getSystemService ( Context . POWER_SERVICE ); PowerManager . WakeLock wl = pm . newWakeLock ( PowerManager . PARTIAL_WAKE_LOCK , getClass (). getName ()); wl . acquire (); try { InputStream input = null ; OutputStream output = null ; HttpURLConnection connection = null ; try { URL url = new URL ( sUrl [ 0 ]); connection = ( HttpURLConnection ) url . openConnection (); connection . connect (); // expect HTTP 200 OK, so we don't mistakenly save error report // instead of the file if ( connection . getResponseCode () != HttpURLConnection . HTTP_OK ) return "Server returned HTTP " + connection . getResponseCode () + " " + connection . getResponseMessage (); // this will be useful to display download percentage // might be -1: server did not report the length int fileLength = connection . getContentLength (); // download the file input = connection . getInputStream (); output = new FileOutputStream ( "/sdcard/myFiledown.format" ); // /sdcard/file_name.extension byte data [] = new byte [ 4096 ]; long total = 0 ; int count ; while (( count = input . read ( data )) != - 1 ) { // allow canceling with back button if ( isCancelled ()) return null ; total += count ; // publishing the progress.... if ( fileLength > 0 ) // only if total length is known publishProgress ((int) ( total * 100 / fileLength )); output . write ( data , 0 , count ); } } catch ( Exception e ) { return e . toString (); } finally { try { if ( output != null ) output . close (); if ( input != null ) input . close (); } catch ( IOException ignored ) { } if ( connection != null ) connection . disconnect (); } } finally { wl . release (); } return null ; } @ Override protected void onPreExecute () { super . onPreExecute (); mProgressDialog . show (); } @ Override protected void onProgressUpdate ( Integer ... progress ) { super . onProgressUpdate ( progress ); // if we get here, length is known, now set indeterminate to false mProgressDialog . setIndeterminate ( false ); mProgressDialog . setMax ( 100 ); mProgressDialog . setProgress ( progress [ 0 ]); } @ Override protected void onPostExecute ( String result ) { mProgressDialog . dismiss (); if ( result != null ) Toast . makeText ( context , "Download error: " + result , Toast . LENGTH_LONG ). show (); else Toast . makeText ( context , "File downloaded" , Toast . LENGTH_SHORT ). show (); } }
با این کد فایل دانلود میشه
کد پیاچپی:
final DownloadTask downloadTask = new DownloadTask ( MainActivity . this ); downloadTask . execute ( "http://www.example.com/file.format" );
حالا من میخام همانطور ک با کد بالا آدرس رو ب کلاس دانلود فرستادم،نام و فرمت رو هم بفرستم ن اینکه خودش مثل کد زیر استاتیک پر کنه
کد پیاچپی:
output = new FileOutputStream ( "/sdcard/myFiledown.format" );
لطفا کمک کنید
مرســـــــــــی