2016-12-24 105 views
4

這是我的代碼myDir.mkdirs();這段代碼告訴我'File.mkdirs()'結果的警告被忽略。'File.mkdirs()'的結果被忽略

我嘗試這個警告,但我失敗了。

private void saveGIF() { 
      Toast.makeText(getApplicationContext(), "Gif Save", Toast.LENGTH_LONG).show(); 
      String filepath123 = BuildConfig.VERSION_NAME; 
      try { 
       File myDir = new File(String.valueOf(Environment.getExternalStorageDirectory().toString()) + "/" + "NewyearGIF");enter code here 

    //My Statement Code This Line Show Me that Warning 

myDir.mkdirs(); 

       File file = new File(myDir, "NewyearGif_" + System.currentTimeMillis() + ".gif"); 
       filepath123 = file.getPath(); 
       InputStream is = getResources().openRawResource(this.ivDrawable); 
       BufferedInputStream bis = new BufferedInputStream(is); 
       ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
       byte[] img = new byte[AccessibilityNodeInfoCompat.ACTION_NEXT_HTML_ELEMENT]; 
       while (true) { 
        int current = bis.read(); 
        if (current == -1) { 
         break; 
        } 
        baos.write(current); 
       } 
       FileOutputStream fos = new FileOutputStream(file); 
       fos.write(baos.toByteArray()); 
       fos.flush(); 
       fos.close(); 
       is.close(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      Intent mediaScanIntent = new Intent("android.intent.action.MEDIA_SCANNER_SCAN_FILE"); 
      mediaScanIntent.setData(Uri.fromFile(new File(filepath123))); 
      sendBroadcast(mediaScanIntent); 
     } 
+3

'File.mkdirs()'的結果被忽略。是。由你!你沒有看到返回值。 – greenapps

+0

文檔說, >您可能會提到文件的更深層次的路徑,但是,不需要創建所有父目錄。因爲,有些可能已經創建。有些不是。所以,即使它不能創建已經存在的目錄,它也會創建一個非存在的目錄,它會給出成功的結果。它會在創建所有必需的目錄時提供真實的結果。所以,在這種情況下需要檢查布爾條件。 – Noorul

回答

11

mkdirs具有boolean返回值,你沒有使用的方法。

boolean wasSuccessful = myDir.mkdirs(); 

create操作返回一個值,該值指示目錄的創建是否成功。例如,結果值wasSuccessful可用於在錯誤時顯示錯誤。

if (!wasSuccessful) { 
    System.out.println("was not successful."); 
} 

Java docs關於boolean返回值:

真當且僅當該目錄的創建,以及所有 所需的父目錄;否則爲false

+0

如果該目錄已存在,則返回false。如您的代碼所示,這不一定是錯誤。 –

+0

@StealthRabbi感謝提示,更新。 –

-1

只是把這個代碼:

File myDirectory = new File(Environment.getExternalStorageDirectory(),"NewyearGIF"); 
if(!myDirectory.exists()) { 
    myDirectory.mkdirs(); 
}else{ 
    // Directory already exist 
} 

如果應用上述Lollipop運行中,那麼你需要添加運行權限存儲。

+0

不,它不是工作 –

+0

你能寫出錯誤日誌嗎? –

+2

'myDirectory.mkdirs(); '。你也忽略了結果值。返回值。它應該是'if(!myDirectory.mkdirs()){Toast(抱歉無法制作目錄);返回false;}' – greenapps

3

mkdir的返回值背後的想法是,每個IO操作都可能失敗,並且您的程序應該對這種情況做出反應。

+0

如何?例如,我使用File.delete()。我通常不在乎它是否無效,因爲我無法做任何事情。也許有人/別的東西刪除它,然後才能做到。那麼... –

+0

@TheincredibleJan我同意你,我通常不關心。我會認爲這是你可以做出反應的選項(在極少數情況下)。 –

0

糾正我,如果我錯了,但我期望(編譯)警告信息真的這樣說:

File.mkdir的結果()被忽略

...或者類似的東西。它告訴你,你忽略了mkdir()調用的結果,告訴你是否創建了一個目錄。

避免警告的一種方法是測試結果並採取適當的行動。另一種方法是將結果簡單地分配給一個臨時變量,忽略它,並且(可能)稍後會崩潰,因爲該目錄本來應該是沒有創建的。

(猜猜哪個解決方案是更好的... ...)

隨意修改代碼,如果有任何其他的錯誤。

既然您問過......對於Java變量名使用匈牙利符號是壞事。 Java是強類型語言,其中所有變量都有明確的聲明類型

public void savefiles(Context c,Bitmap image,String name) 
    { 
     ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); 

     if (!path.exists()) { 
       if(path.mkdir()){ 
        // do something 
       } 
     } 
    } 

。你不應該需要一些可怕的標識符約定的精神柺杖來告訴你一個變量的類型是什麼意圖。

+0

「既然你問過」?你是誰」?如果一種語言是強類型的,這並不重要 - 如果您需要知道變量的類型並且只有簡單的文本編輯器,那麼匈牙利語符號可能會有所幫助。 –