2013-04-20 19 views
23

Android uygulamamda bir gereksinimim var. Sdcard Programmatically belirli bir klasöre dosya indirmek ve kaydetmek gerekiyor. Ben .. Android: Dosyayı sunucudan karşıdan yükleme ve sdcard uygulamasında belirli bir klasöre kaydetme

kaynak kodunu geliştirdik ve benim kod
String DownloadUrl = "http://myexample.com/android/"; 
    String fileName = "myclock_db.db"; 

    DownloadDatabase(DownloadUrl,fileName); 

    // and the method is 

public void DownloadDatabase(String DownloadUrl, String fileName) { 
    try { 
     File root = android.os.Environment.getExternalStorageDirectory(); 
     File dir = new File(root.getAbsolutePath() + "/myclock/databases"); 
     if(dir.exists() == false){ 
      dir.mkdirs(); 
     } 

     URL url = new URL("http://myexample.com/android/"); 
     File file = new File(dir,fileName); 

     long startTime = System.currentTimeMillis(); 
     Log.d("DownloadManager" , "download url:" +url); 
     Log.d("DownloadManager" , "download file name:" + fileName); 

     URLConnection uconn = url.openConnection(); 
     uconn.setReadTimeout(TIMEOUT_CONNECTION); 
     uconn.setConnectTimeout(TIMEOUT_SOCKET); 

     InputStream is = uconn.getInputStream(); 
     BufferedInputStream bufferinstream = new BufferedInputStream(is); 

     ByteArrayBuffer baf = new ByteArrayBuffer(5000); 
     int current = 0; 
     while((current = bufferinstream.read()) != -1){ 
      baf.append((byte) current); 
     } 

     FileOutputStream fos = new FileOutputStream(file); 
     fos.write(baf.toByteArray()); 
     fos.flush(); 
     fos.close(); 
     Log.d("DownloadManager" , "download ready in" + ((System.currentTimeMillis() - startTime)/1000) + "sec"); 
     int dotindex = fileName.lastIndexOf('.'); 
     if(dotindex>=0){ 
      fileName = fileName.substring(0,dotindex); 

    } 
    catch(IOException e) { 
     Log.d("DownloadManager" , "Error:" + e); 
    } 

} 

Şimdi mesele dosya adı myclock_db.db sadece boş bir dosya yolunda kaydediyor olmasıdır. ancak belirli bir dosyadaki dosya içeriğini indirmem ve kaydetmem gerekiyor. Dosya indirme işlemini birkaç yolla denedim, ancak yapamam. Herkes

+0

Bu örnekte nasıl kontrol edebilirim Dosyayı İndir Tamamlandı 100% –

+0

Db dosyanız büyük bir boyutta olabileceğinden, tüm akışı akışa eklemek yerine dosyanın tamamını parçalar halinde yazmanızı ve tüm dosyayı bir Zamanlar. – MikeL

cevap

13

İndirme URL herhangi bir dosyaya bir bağlantı değildir ... önceden ... bana sorunu çözmek için

Teşekkür yardımcı olabilir. Bu bir dizin. Bir dosyanın olduğundan ve var olduğundan emin olun. Ayrıca hata günlükleri için logcat pencerenizi kontrol edin. Bir öneri, her zaman Log'lar yerine catch bloklarında printStackTrace() yapmak daha iyidir. Bu, hatanın daha ayrıntılı bir görünümünü verir.

Değişim bu satırı:

URL url = new URL("http://myexample.com/android/"); 

için:

URL url = new URL("http://myexample.com/android/yourfilename.txt"); //some file url 

Sonraki, catch bloğunda, bu satırı ekleyin: dizin yolu da

e.printStackTrace(); 

, olması gerektiği bunun gibi bir şey:

File dir = new File(root.getAbsolutePath() + "/mnt/sdcard/myclock/databases"); 

yerine

File dir = new File(root.getAbsolutePath() + "/myclock/databases"); 

Sonraki, Android manifest harici depolama birimine yazma izni kazanmıştır emin olun.

+0

Tamam, Kodumu nasıl düzenlerim? Lütfen bana rehberlik edebilir misiniz .. @ shiladitya –

+0

düzenlenen yanıtı kontrol edin – shiladitya

+0

Aslında, İndirdiğim dosya bir dosyadır ancak .db uzantısı olmayan bir veritabanı dosyasıdır. Sunucudan indirmek için uzantı ekledim ve indirildim. Şimdi indirdiğimiz dosya bir uzantıya sahip olduğu için erişmiyor. indirildikten sonra uzantıyı kaldırmamız gerekiyor ya da çalışmayan webconfig dosyasında mime tipini bildirmek için başka bir yol var. Yani, bana extensionafter indirmeyi nasıl kaldıracağınızı yönlendirir misiniz. Kodumu bunun için güncelledim .. bir kez kontrol edebilir misiniz. –

İlgili konular