Android создает папки во внутренней памяти

Есть ли способ / разрешено ли создавать папки во внутренней памяти в Android. Пример:

- data
-- com.test.app (application's main package)
---databases (database files)
---files (private files for application)
---shared_prefs (shared preferences)

---users (folder which I want to create)

Могу ли я создать users папка во внутренней памяти например?

7 ответов

Решение

Я использовал это, чтобы создать папку / файл во внутренней памяти:

File mydir = context.getDir("mydir", Context.MODE_PRIVATE); //Creating an internal dir;
File fileWithinMyDir = new File(mydir, "myfile"); //Getting a file within the dir.
FileOutputStream out = new FileOutputStream(fileWithinMyDir); //Use the stream as usual to write into the file.

ВЫ НЕ ДОЛЖНЫ ИСПОЛЬЗОВАТЬ ЭТО, ЕСЛИ ВЫ ХОТИТЕ, ЧТОБЫ ВАШИ ФАЙЛЫ ДОСТУПНЫ ДЛЯ ПОЛЬЗОВАТЕЛЯ.

File newdir= context.getDir("DirName", Context.MODE_PRIVATE);  //Don't do
if (!newdir.exists())
    newdir.mkdirs();

ВМЕСТО, сделайте это:

Для создания каталога на основной памяти телефона (обычно внутренней памяти) необходимо использовать следующий код. Обратите внимание, что ExternalStorage в Environment.getExternalStorageDirectory() не обязательно относится к SDCard, он возвращает основную память телефона.

File mediaStorageDir = new File(Environment.getExternalStorageDirectory(), "MyDirName");

if (!mediaStorageDir.exists()) {
    if (!mediaStorageDir.mkdirs()) {
        Log.d("App", "failed to create directory");
    }
}

Каталог, созданный с использованием этого кода, будет легко виден пользователю телефона. Другой метод (упомянутый первым) создает каталог в местоположении (/data/data/package.name/app_MyDirName), следовательно, обычный пользователь телефона не сможет получить к нему легкий доступ, и поэтому вы не должны использовать его для хранения видео / фото и т. Д.

Вам понадобятся разрешения, в AndroidManifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />

context.getDir("mydir", ...); Это создает ваш.package/app_mydir/

 /** Retrieve or creates <b>path</b>structure inside in your /data/data/you.app.package/
 * @param path "dir1/dir2/dir3"
 * @return
 */
private File getChildrenFolder(String path) {
            File dir = context.getFilesDir();
    List<String> dirs = new ArrayList<String>(Arrays.<String>asList(path.split("/")));
    for(int i = 0; i < dirs.size(); ++i) {
        dir = new File(dir, dirs.get(i)); //Getting a file within the dir.
        if(!dir.exists()) {
            dir.mkdir();
        }
    }
    return dir;
}

Android меняет свою безопасность в отношении хранилища. Для получения дополнительных сведений проверьте доступ к хранилищу видео с Android 10.

Также вы можете попробовать это в android 10

      File mydir = new File(getApplicationContext().getExternalFilesDir("Directory Name").getAbsolutePath());
    if (!mydir.exists())
    {
        mydir.mkdirs();
        Toast.makeText(getApplicationContext(),"Directory Created",Toast.LENGTH_LONG).show();
    }

Путь к вашему каталогу будет в данных вашего приложения.

      //gets path of the directory("imRec") in Android's data folder
File file=new File(getApplicationContext().getExternalFilesDir("imRec").getAbsolutePath());

if (!file.exists()) {  //if directory by that name doesn't exist
    if (!file.mkdirs()) { //we create the directory
          //if still directory doesn't get created ERROR mssg gets displayed
          //which in most cases won't happen
          Toast.makeText(CameraActivity.this, "ERROR", Toast.LENGTH_SHORT).show();          
    }
}
      File f = new File(Environment.getExternalStorageDirectory(), "FolderName");
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            try {
               Files.createDirectory(Paths.get(f.getAbsolutePath()));
            } catch (IOException e) {
                e.printStackTrace();
                Toast.makeText(getApplicationContext(), e.getLocalizedMessage(), Toast.LENGTH_LONG).show();
            }
        } else {
            f.mkdir();
            f.mkdirs();
            Toast.makeText(getApplicationContext(), f.getPath(), Toast.LENGTH_LONG).show();
        }
        private File createFile(String fName)  {
            String filePath = Environment.getExternalStorageDirectory().getAbsolutePath()+"/" + fName+".wav";
            File newFile = new File(filePath);
            println(":File path = "+newFile+"\n "+filePath);
            if (!newFile.exists()) {
                try {
                    newFile.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                    toastMsg("Unable to Create New File !");
                }
            } else {
                toastMsg("File Already Exists");

            }

            return newFile;

        }

// Запрос нескольких разрешений

      private void reqMulPerm(){
        String permissions[]={
                Manifest.permission.ACCESS_BACKGROUND_LOCATION,
                Manifest.permission.ACCESS_FINE_LOCATION,
                Manifest.permission.ACCESS_COARSE_LOCATION,
                Manifest.permission.READ_EXTERNAL_STORAGE,
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
        };

        if(permissions.length!=0){
            ActivityCompat.requestPermissions(this,permissions,1);
        }
    }
Другие вопросы по тегам