2016-04-14 12 views
0

benim kod çalışıyor, bu sd kart görüntülerini indirir, ancak, ben bu sd kart yolu tanımladı nerede bu uyarı almak "Do not hardcode"/sdcard/"; Environment.getExternalStorageDirectory(). getPath() yerine "android sd kart yolu olsun zor kodlanmış yol

@Override 
    protected String doInBackground(String... aurl) { 
     int count; 
     try { 
      URL url = new URL(aurl[0]); 
      URLConnection conexion = url.openConnection(); 
      conexion.connect(); 
      int lenghtOfFile = conexion.getContentLength(); 
      Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile); 
      InputStream input = new BufferedInputStream(url.openStream()); 
      OutputStream output = new FileOutputStream("/sdcard/.temp");//.temp is the image file name 
      byte data[] = new byte[1024]; 
      long total = 0; 
      while ((count = input.read(data)) != -1) { 
       total += count; 
       publishProgress("" + (int) ((total * 100)/lenghtOfFile)); 
       output.write(data, 0, count); 
      } 
      output.flush(); 
      output.close(); 
      input.close(); 
     } catch (Exception e) { 
     } 
     return null; 
    } 

    protected void onProgressUpdate(String... progress) { 
     Log.d("ANDRO_ASYNC", progress[0]); 
    } 

i önerilen çözüm kullanırsanız sorun, sonra ben yeni bir isim benim indirilen dosyayı vermek mümkün olmayacaktır olduğu (" .temp"

+0

OutputStream çıkışı = new FileOutputStream (. yeni Dosya (Environment.getExternalStorageDirectory(), ".temp") getAbsolutePath()) – dex

cevap

1

Dosya ve dizinlerle çalışırken, dizelerle değil, File nesnelerle çalışmak daha iyidir.

File dir = Environment.getExternalStorageDirectory(); 
File tmpFile = new File(dir, ".temp"); 
OutputStream output = new FileOutputStream(tmpFile); 

ortamın harici depolama dizininde ".temp" adlı bir dosyaya işaret eden bir File nesnesi oluşturur: Burada uyarıyı ele alabilir nasıl. Daha sonra, FileOutputStream sınıfının farklı bir kurucusunu kullanarak yazmak için açar.

(yazdırma için diyelim ki,) yerine bir dize olarak dosya yolunu gerekiyorsa, yapabileceği da o:

String tmpFileString = tmpFile.getPath(); 

Yoksa ileride java.nio API kullanmaya karar ve Path gerekirse nesne:

Path tmpFilePath = tmpFile.toPath(); 
+0

dize ve yol arasındaki fark nedir? – abbie

+0

@abbie - A 'String' sadece bir metin parçası. Bir 'Path' nesnesi, java.nio' API'sinin bir parçasıdır. Amacınız için, bir 'Dosya' muhtemelen kullanılacak en iyi şey olurdu; argüman olarak bir 'File' ileten bir' FileOutputStream' yaratabilirsiniz ve gayet iyi çalışır. –

+0

değiştirmem gerekir "OutputStream çıkışı = yeni FileOutputStream ("/sdcard/.temp ");" ** with ** "String tmpFile = yeni Dosya (dir," .temp "). getPath();" – abbie

İlgili konular