2016-12-24 59 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

Docsによれば、 >ファイルのより深いところを言及しているかもしれませんが、すべての親ディレクトリを作成する必要はありません。既に作成されているものもあるからです。いくつかはありません。だから、それはすでに存在ディレクトリを作成することに失敗しても、それは成功の結果を与える存在しないディレクトリを作成します。必要なディレクトリがすべて作成されると、真の結果が得られます。したがって、このシナリオでブール条件をチェックする必要があります。 – Noorul

答えて

11

あなたが使用しなかったboolean戻り値を、持っていmkdirs方法。

boolean wasSuccessful = myDir.mkdirs(); 

create操作は、ディレクトリの作成が成功したかどうかを示す値を返します。たとえば、結果値がwasSuccessfulの場合、falseの場合にエラーを表示できます。 boolean戻り値についてJava docsから

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

trueの場合にのみディレクトリが作成された場合、すべての 必要な親ディレクトリと一緒に。ただ、このコードは入れそうでない場合はfalse

+0

ディレクトリがすでに存在する場合は、falseを返します。コードが示すように、これは必ずしもエラーではありません。 –

+0

@StealthRabbiヒントのおかげで、更新されました。 –

-1

:アプリケーションがLollipop上で実行している場合は

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

を、あなたは、ストレージのランタイム権限を追加する必要があります。

+0

いいえ、それは心配していません –

+0

エラーログを書き留めていただけますか? –

+2

'myDirectory.mkdirs(); '。結果値も無視されます。戻り値'if(!myDirectory.mkdirs()){Toast(ディレクトリを作成できませんでした)。 return false;} ' – greenapps

3

mkdirの戻り値の背後にあるアイデアは、すべてのIO操作が失敗し、プログラムがこの状況に対応する必要があるということです。私が間違っている場合

+0

どうすればよいですか?私は例えばFile.delete()を使用します。私はそれについて何もすることができないので、それがうまくいかないかどうか気にしません。多分誰か他の人がそれをやる前にそれを削除したかもしれない。だから何が... –

+0

@TheincredibleJan私はあなたに同意するが、私は通常気にしない。私はあなたが(まれにしか)反応することができる選択肢と考えています。 –

0

は私を修正して、私は(コンパイル)、警告メッセージが本当にこれが言うことを期待:)File.mkdir(の

の検索結果を

...またはそのような何かを無視されます。ディレクトリが作成されたかどうかを示すmkdir()呼び出しの結果を無視していることを伝えています。

警告を回避する1つの方法は、結果をテストして適切に動作させることです。別の方法としては、一時変数に結果を代入し、無視し、ディレクトリが作成されたはずのときにディレクトリが作成されなかったために後でクラッシュする可能性があります。

は、他の間違いがある場合、コードを変更してお気軽に(...優れているソリューション推測)。

尋ねられたので... 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

「あなたは尋ねたので?あなたは誰です"?言語が厳密に型付けされているかどうかは関係ありません。変数の型を知っていて、簡単なテキストエディタだけを必要とする場合は、ハンガリー表記が役立ちます。 –

関連する問題