Как сохранить файл.vcf в отдельной папке на внутренней SDCard

Я использую следующий код для хранения vcf файл, который я генерирую из кода, который я могу генерировать vcf файл, но он отображается в корневом каталоге на SD-карте. Я хочу сохранить его в отдельной папке. Как мне соответствовать требованиям? Пожалуйста, помогите Спасибо.

private void getVcardString() throws IOException {

        final String vfile = "BackupCont" + currDate + ".vcf";
        vCard = new ArrayList<String>();

        cursor = getContentResolver().query(
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,
                null, null);
        Cursor c = dbhandle.getContactsByIsChecked();
        ArrayList<String> arrchk=new ArrayList<String>();
        for(int cc=0;cc<c.getCount();cc++)
        {
            arrchk.add(c.getString(c.getColumnIndex("con_name")));
        }

        if (cursor != null && cursor.getCount() > 0) {

            int i;

            String new_path= Environment.getExternalStorageDirectory().getAbsolutePath()+"/Folder_name"; 
            // String path = "c:/";
            File dir = new File(new_path);

            if (!dir.exists())
                dir.mkdirs();

            String storage_path = Environment.getExternalStorageDirectory()+"/Folder_name"+vfile;
            Toast.makeText(getApplicationContext(), storage_path,Toast.LENGTH_LONG).show();
            FileOutputStream mFileOutputStream = new FileOutputStream(storage_path, false);

            cursor.moveToFirst();

            for (i = 0; i < cursor.getCount(); i++)
            {

                if(arrchk.contains(cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME))))
                {
                    get(cursor);
                    cursor.moveToNext();
                    mFileOutputStream.write(vCard.get(i).toString().getBytes());
                }

            }

            mFileOutputStream.close();
            cursor.close();

            Toast.makeText(getApplicationContext(), "Created...",Toast.LENGTH_LONG).show();

            Uri uri=Uri.fromFile(new File(storage_path,""+vfile));
            Intent sharingIntent = new Intent(Intent.ACTION_SEND);
            sharingIntent.setType("application/x-vcard");

            sharingIntent.putExtra(android.content.Intent.EXTRA_STREAM, uri);
            startActivity(Intent.createChooser(sharingIntent, "Share using"));

        }
        else
        {
            Log.d("TAG", "No Contacts in Your Phone");
        }

}

1 ответ

Решение
String outputDirectory = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "subFolderName";

outputDirectory.mkdirs();

File outputFile = new File(outputDirectory, filename);

FileOutputStream fos = new FileOutputStream(outputFile);

Вы также должны проверить Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) чтобы убедиться, что внешнее хранилище действительно доступно.

Другие вопросы по тегам