Запись в файл с использованием getFilesDir(), приводящая к ошибке "Файловая система только для чтения" (Android)
Я хочу записать во внутренний каталог файлов моего приложения, но получаю следующую ошибку:
java.io.FileNotFoundException: com.android.internal.os.AndroidPrintStream@47a0990 (Read-only file system)
Таким образом, он говорит, что это "только для чтения" хранилище. я использую getFilesDir()
чтобы найти путь, и я видел много примеров онлайн людей, использующих это для записи во внутреннее хранилище. Почему я вижу эту ошибку?
Мой код ниже:
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.newDocument();
// Root element
Element rootElement = doc.createElement("license");
doc.appendChild(rootElement);
// Write content to XML file.
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(context.getFilesDir().getPath() + "/license.xml"));
System.out.println("Saving to: " + context.getFilesDir().getPath());
transformer.transform(source, result);
Исключение выдается в последней строке моего кода.
У меня есть следующие разрешения в моем манифесте:
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Обратите внимание, я не хочу писать на внешнее хранилище, так как этот файл не должен быть виден пользователям.
Я могу написать в тот же каталог, используя FileOutputStream
без каких-либо исключений... так почему же Transformer
столкнулись с этой проблемой только для чтения?
1 ответ
getFilesDir()
является /data/data/com.example.apk/files
Вам не нужно использовать эти разрешения.
Это говорит filenotfound
, Попробуйте сначала создать его.
Тем не менее, это странно