2016-04-14 120 views
0

我的代碼工作正常,它將圖像下載到sd卡,但是,我得到此警告,我在其中定義了我的sd卡路徑「不要硬編碼」/ sdcard /「;使用Environment.getExternalStorageDirectory()的getPath(),而不是「得到sd卡路徑在android vs硬編碼路徑

@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]); 
    } 

的問題是,如果我使用建議的解決方案,那麼我將不能夠給我下載的文件一個新的名稱(」 .temp」 )

+0

的OutputStream輸出=新的FileOutputStream中(新的文件(Environment.getExternalStorageDirectory(), 「.temp」)getAbsolutePath()) – dex

回答

1

使用文件和目錄時,最好使用File對象而不是字符串。這裏是你如何解決警告:

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

,創建一個File對象指向一個名爲環境的外部存儲目錄".temp"文件。然後使用FileOutputStream類的不同構造函數打開它。

如果你需要,而不是文件路徑作爲字符串(比如印刷),你也可以這樣做:

String tmpFileString = tmpFile.getPath(); 

或者,如果你決定使用java.nio API在未來,需要一個Path對象:

Path tmpFilePath = tmpFile.toPath(); 
+0

是什麼字符串和路徑之間的區別? – abbie

+0

@abbie - 「String」就是這樣 - 一段文字。 'Path'對象是'java.nio' API的一部分。出於您的目的,「File」可能是最好的選擇;你可以創建一個傳遞'File'作爲參數的'FileOutputStream',它可以很好地工作。 –

+0

我應該替換「OutputStream output = new FileOutputStream(」/ sdcard/.temp「);」 ** with **「String tmpFile = new File(dir,」.temp「)。getPath();」 – abbie