В API 29 и выше выполнение каких-либо действий с путями вне частного хранилища приложений не будет работать.
Подробнее см. https://developer.android.com/training/data-storage/files/external-scoped
Поэтому для сохранения необходимосделать что-то вроде: -
// OnClick Save Button
public void Save(View view){
// Ask for a new filename
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
// Restrict to openable items
intent.addCategory(Intent.CATEGORY_OPENABLE);
// Set mimeType
intent.setType("text/plain");
// Suggest a filename
intent.putExtra(Intent.EXTRA_TITLE, "text.txt");
// Start SAF file chooser
startActivityForResult(intent, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent resultData) {
super.onActivityResult(requestCode, resultCode, resultData);
if (requestCode == 1 && resultCode == RESULT_OK) {
Log.d("SAF", "Result code 1");
if (resultData != null) {
Uri uri = resultData.getData();
Log.d("SAF", uri.toString());
// Now write the file
try {
ParcelFileDescriptor pfd =
this.getContentResolver().
openFileDescriptor(uri, "w");
// Get a Java FileDescriptor to pass to Java IO operations
FileDescriptor fileDescriptor = pfd.getFileDescriptor();
// Read Input stream
FileOutputStream fileOutputStream =
new FileOutputStream(fileDescriptor);
// .....
} catch (Exception e){
// Do something with Exceptions
}
} else {
Log.d("SAF", "No Result");
}
}
}