Сохранить внутренний файл в моей собственной внутренней папке на Android

Я пытаюсь сохранить txt-файл в своей папке во внутреннем хранилище, но каждый раз сталкиваюсь с одной и той же проблемой:

«Источник не найден»

Я пишу свой код по-разному, выраженный здесь следующим образом, но во всех отношениях у меня такая же проблема.

Стоит сказать, что я даже добавляю

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

В Manifest.xml, который не нужен для внутреннего хранилища.

Нет необходимости говорить, что у меня нет проблем с сохранением файлов в пути / data / data / package / files , но когда я добавляю свою папку в корневой каталог файлов, например / data / data / package / files / myforlder /myfile.txt Я сталкиваюсь с проблемой «Источник не найден».

Не могли бы вы указать мне в правильном направлении, чтобы решить это?

Второй вопрос заключается в том, что для сохранения файла во внешней папке во внешнем хранилище.
(Например: SDCard или USB-накопитель) – это сценарий по-другому или он такой же?

Первый путь:

 OutputStreamWriter out; try { File path=new File(getFilesDir(),"myfolder"); File mypath=new File(path,"myfile.txt"); if (!mypath.exists()) { out = new OutputStreamWriter(openFileOutput( mypath.getAbsolutePath() , MODE_PRIVATE)); out.write("test"); out.close(); } } 

Второй путь:

 OutputStreamWriter out; try { ContextWrapper cw = new ContextWrapper(this); File path = cw.getDir("myfolder", Context.MODE_PRIVATE); if (!path.exists()) { path.createNewFile(); path.mkdir(); } File mypath=new File(path,"myfile.txt"); if (!mypath.exists()) { out = new OutputStreamWriter(openFileOutput( mypath.getAbsolutePath() , MODE_PRIVATE)); out.write("test"); out.close(); } } 

Третий путь:

 File path=getFilesDir(); String mypath=path.toString() + "/myfolder"; OutputStreamWriter out; try { File f = new File(mypath , "/myfile.txt" ); out = new OutputStreamWriter(openFileOutput(f.getPath(), MODE_PRIVATE)); out.write("test"); out.close(); } 

Четвертый путь:

 File path=getFilesDir(); OutputStreamWriter out; try { File f = new File(path.getPath() + "/myfolder/myfile.txt" ); out = new OutputStreamWriter(openFileOutput(f.getPath(), MODE_PRIVATE)); out.write("test"); out.close(); } 

Пятый путь:

 File path=getFilesDir(); OutputStreamWriter out; try { File f = new File(path.getCanonicalPath() + "/myfile.txt"); out = new OutputStreamWriter(openFileOutput( f.getPath(), MODE_PRIVATE)); out.write("test"); out.close(); } 

Первый путь:

Вы не создали каталог. Кроме того, вы передаете абсолютный путь openFileOutput() , что неверно.

Второй путь:

Вы создали пустой файл с нужным именем, что помешало вам создать каталог. Кроме того, вы передаете абсолютный путь openFileOutput() , что неверно.

Третий путь:

Вы не создали каталог. Кроме того, вы передаете абсолютный путь openFileOutput() , что неверно.

Четвертый путь:

Вы не создали каталог. Кроме того, вы передаете абсолютный путь openFileOutput() , что неверно.

Пятый путь:

Вы не создали каталог. Кроме того, вы передаете абсолютный путь openFileOutput() , что неверно.

Правильный способ:

  1. Создайте File для нужной директории (например, File path=new File(getFilesDir(),"myfolder"); )
  2. Вызовите mkdirs() в этом File чтобы создать каталог, если он не существует
  3. Создайте File для выходного файла (например, File mypath=new File(path,"myfile.txt"); )
  4. Используйте стандартный ввод / вывод Java для записи в этот File (например, используя new BufferedWriter(new FileWriter(mypath)) )

Сохранить:

 public boolean saveFile(Context context, String mytext){ Log.i("TESTE", "SAVE"); try { FileOutputStream fos = context.openFileOutput("file_name"+".txt",Context.MODE_PRIVATE); Writer out = new OutputStreamWriter(fos); out.write(mytext); out.close(); return true; } catch (IOException e) { e.printStackTrace(); return false; } } 

Нагрузка:

 public String load(Context context){ Log.i("TESTE", "FILE"); try { FileInputStream fis = context.openFileInput("file_name"+".txt"); BufferedReader r = new BufferedReader(new InputStreamReader(fis)); String line= r.readLine(); r.close(); return line; } catch (IOException e) { e.printStackTrace(); Log.i("TESTE", "FILE - false"); return null; } } 

Ответ Mintir4 в порядке, я бы на нагрузке сделал следующее (чтобы прочитать все строки)

 FileInputStream fis = myContext.openFileInput(fn); BufferedReader r = new BufferedReader(new InputStreamReader(fis)); String s = ""; while ((s = r.readLine()) != null) { txt += s; } r.close();