Создать файл / базу данных с SD-карты - PullRequest
0 голосов
/ 17 октября 2018

Я новичок в Android Studio

Я также могу создать файл из Память телефона , но мне нужно Как создать файл с SD-карты ,я использую виртуальное устройство или i9000S .

на самом деле я использую:

Android Jellybean

Уровень API: 18

Версия Android: 4.3

Если я использую это File myFile = new File("/sdcard/sample.txt");, это работает.

когда я использую это File myFile = new File("/sdcard1/sample.txt");, это не работает.это дает мне ошибку вроде Error: open failed: ENOENT (No such file or directory).

MainActivity.java:

final String NEW_FOLDER_NAME = "TestFolder";
testPath(new File(Environment.getExternalStorageDirectory(), NEW_FOLDER_NAME));
testPath(new File("/storage/emulated/0/", NEW_FOLDER_NAME));
testPath(new File("/storage/emulated/1/", NEW_FOLDER_NAME));
testPath(new File("/storage/sdcard0/Download/", NEW_FOLDER_NAME));
testPath(new File("/storage/sdcard1", NEW_FOLDER_NAME));
b1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        try {
            String E1 = System.getenv("EXTERNAL_STORAGE");
            File F1 = new File(E1, NEW_FOLDER_NAME);
            String E2 = System.getenv("SECONDARY_STORAGE");
            File F2 = new File(E2, NEW_FOLDER_NAME);
            testPath(new File("/storage/sdcard1", NEW_FOLDER_NAME));
            testPath(F1);
            testPath(F2);

            File myFile = new File("/sdcard1/sample.txt");
            myFile.createNewFile();
            FileOutputStream fOut = new FileOutputStream(myFile);
            OutputStreamWriter myOutWriter =
                    new OutputStreamWriter(fOut);
            myOutWriter.append(e1.getText());
            myOutWriter.close();
            fOut.close();
            Toast.makeText(Main1Activity.this, "Save to" + getFilesDir() + ">" + NEW_FOLDER_NAME, Toast.LENGTH_LONG).show();
        } catch (Exception e) {
            Toast.makeText(getBaseContext(), e.getMessage(),
                    Toast.LENGTH_SHORT).show();
        }
    }
});

private void testPath(File path) {
    String TAG = "Debug.MainActivity.java";
    String FOLDER_CREATION_SUCCESS = " mkdir() success: ";
    boolean success;
    if (path.exists()) {
        // already created
        success = true;
    } else {
        success = path.mkdir();
    }
    Log.d(TAG, path.getAbsolutePath() + FOLDER_CREATION_SUCCESS + success);
    path.delete();
}

edit : я ужедобавить из файла манифеста:

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

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Для получения корневого пути sdcard вы должны использовать

Environment.getExternalStoragexxx
0 голосов
/ 17 октября 2018

Из официального документа - этот фрагмент создаст файл на вашем внутреннем хранилище.Разрешение WRITE_EXTERNAL_STORAGE не требуется.

// Create new file and write 
File file = new File(context.getFilesDir(), filename);

String filename = "yourFileName.txt";
String fileContents = "Insert your data here.";
FileOutputStream outputStream;

try {
    outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
    outputStream.write(fileContents.getBytes());
    outputStream.close();
} catch (Exception e) {
    e.printStackTrace();
}


// Opening a file 
File directory = context.getFilesDir();
File file = new File(directory, filename);
// Here you can re-write or edit your file

Пожалуйста, посмотрите на это - Чтение / запись внутреннего хранилища

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...