2017-09-12 16 views
0

私のAndroidプロジェクトでは、イメージファイルをデバイスに保存しています。そこに私はファイルを作成するために次のコードを使用します。Androidファイルが作成されていません

File folder = new File(getFilesDir()); 
     if (!folder.exists()) { 
      folder.mkdir(); 
     } 
File imageFile = new File(folder, filename); 
try 
    { 
    FileOutputStream fos = new FileOutputStream(imageFile); 
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); 
    fos.close(); 
    } 
    catch (Exception e) 
    { 
    e.printStackTrace(); 
    } 

が、これはそうファイルは作成しないと思われるのFileOutputStream

FileOutputStream fos = new FileOutputStream(imageFile); 

を作成するときに私が見つからない例外をファイルできます。どうすればこの問題を解決できますか?

+1

あなたは[持っているあなたは、「ファイル名」 –

+0

を標的にしている場合、ファイルが/storage/emulated/0/PAssets/PProfilePicture.png –

+0

@PierGiorgioMisleyの値であり、デバッグ、Android用> 23 –

答えて

0

問題は、私は、Android 6.0を実行しているAndroidのエミュレータを使用していると私は、実行時のアクセス権をチェックしていないよでした。外部ストレージにアクセスする際にAPI 23より前には、実行時アクセス許可が必要です。以下のようにパーミッションをチェックしました。

public boolean isStoragePermissionGranted() { 
     if (Build.VERSION.SDK_INT >= 23) { 
      if (checkSelfPermission(getActivity(), android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { 
       return true; 
      } else { 
       ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); 
       return false; 
      } 
     } 
     else { 
      return true; 
     } 
    } 

私たちのタスクを実行できるように、コールバックで受け取った一度の許可です。

@Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     if(grantResults[0]== PackageManager.PERMISSION_GRANTED){ 
      saveTempImage(bmp, filename); 
     } 
    } 

ありがとうございました。

+0

ナンセンス。 'getFilesDir()'は内部メモリであり、そのためのパーミッションは必要ありません。 '/ storage/emulated/0/PAssets/PProfilePicture.png''/storage/emulated/0'は内部メモリではなく外部です。あなたのコードはあなたの問題を表していません。 – greenapps

0

folderは作成されていないと思います。 folderにこのようなパスがある場合:/folder1/folder2。最初にfolder1を作成してからfolder2?を作成してください。その後、コードを再度実行します。

+0

私は1つのフォルダ "PAssets"を作成しています。デバッグ時の私のファイルパスは以下の通りです。 */storage/emulated/0/PAssets/PProfilePicture.png * –

+0

ログを投稿して、 'getFilesDir()'メソッドを表示できますか? –

+0

プライベートString getFilesDir(){ return Environment.getExternalStorageDirectory()+ ASSETS_FOLDER_NAME; } –

0

あなたは明示的に次のようにファイルを作成する必要があります。

File imageFile = new File(folder, filename); 

if(!imageFile.exists()){ 
    imageFile.createNewFile(); 
} 
関連する問題