Не уверен насчет ошибки трассировки стека, о которой вы упоминали в своем комментарии, но если вы предоставите разрешение в настройках, ваш код должен работать.
Вероятно, лучшая вещь - это проверить разрешение и только если доступно, продолжить работу с логикой хранения, что-то вроде:
boolean Available = false;
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE) !=
PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "Grant the external storage permission first!",
Toast.LENGTH_SHORT).show();
} else {
// then do your rest of the storage checks and logic.
}
См. здесь подробнее о том, как обрабатывать разрешениеrequest.
Также обратите внимание, что вам, вероятно, нужно использовать папку, которую вы объявили, поэтому вместо:
File f = new File(Environment.getExternalStorageDirectory() +
"/file");
вы должны использовать:
File f = new File(myfolder, "file");