Guarde el archivo interno en mi propia carpeta interna en Android

Intento guardar un archivo txt en mi carpeta, en el almacenamiento interno, pero siempre tengo el mismo problema:

“Fuente no encontrada”

Escribo mi código de diferentes maneras expresadas aquí de la siguiente manera, pero en todos los sentidos tengo el mismo problema.

Vale la pena decir que incluso agrego

en Manifest.xml que no es necesario para el almacenamiento interno.

No hace falta decir que no tengo ningún problema para guardar archivos en / data / data / package / files , pero cuando agrego mi carpeta en la raíz de los archivos / data / data / package / files / myforlder /myfile.txt Me enfrento al problema de “Fuente no encontrada”.

¿Podrías dirigirme en la dirección correcta para resolver esto?

La segunda pregunta es que, para guardar un archivo en una carpeta externa en el almacenamiento externo.
(por ejemplo: sdCard o almacenamiento USB) ¿Es el escenario diferente o es el mismo?

Primera forma:

 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(); } } 

Segunda forma:

 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(); } } 

Tercera forma:

 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(); } 

Cuarto Camino:

 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(); } 

Quinto modo:

 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(); } 

Primera forma:

Usted no creó el directorio. Además, está pasando una ruta absoluta a openFileOutput() , que es incorrecta.

Segunda forma:

Creó un archivo vacío con el nombre deseado, lo que le impidió crear el directorio. Además, está pasando una ruta absoluta a openFileOutput() , que es incorrecta.

Tercera forma:

Usted no creó el directorio. Además, está pasando una ruta absoluta a openFileOutput() , que es incorrecta.

Cuarto Camino:

Usted no creó el directorio. Además, está pasando una ruta absoluta a openFileOutput() , que es incorrecta.

Quinto modo:

Usted no creó el directorio. Además, está pasando una ruta absoluta a openFileOutput() , que es incorrecta.

Forma correcta:

  1. Cree un File para su directorio deseado (por ej., File path=new File(getFilesDir(),"myfolder"); )
  2. Llame a mkdirs() en ese File para crear el directorio si no existe
  3. Cree un File para el archivo de salida (por ejemplo, File mypath=new File(path,"myfile.txt"); )
  4. Utilice la E / S Java estándar para escribir en ese File (por ejemplo, utilizando el new BufferedWriter(new FileWriter(mypath)) )

Salvar:

 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; } } 

Carga:

 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; } } 

La respuesta de Mintir4 está bien, yo en la carga hago lo siguiente (para leer todas las líneas)

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