PDA

Ver la Versión Completa : [ SOLUCIONADO ] Almacenamiento archivo txt en la sd


javiviplz
29/07/15, 18:10:52
Hola, estoy aprendiendo lo basico de de programar en android y tengo el siguiente problema.
el programa lo que hace es crear un archivo txt en la sd y guarda los datos que le pases por un EditText.
El problema es que siempre me salta la excepcion IOException.
(he habilitado los permisos de escritura en la sd).

Codigo:


import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
EditText et1;
EditText et2;

override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

et1 = (EditText) findViewById(R.id.editText1);
et2 = (EditText) findViewById(R.id.editText2);
}


public void grabar(View v) {
String nomarchivo = et1.getText().toString();
String contenido = et2.getText().toString();
System.out.println("entra en try");
File tarjeta = Environment.getExternalStorageDirectory();
File file = new File(tarjeta.getAbsolutePath(), nomarchivo);
try {
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(file));
osw.write(contenido);
osw.flush();
osw.close();
Toast.makeText(this, "Los datos fueron grabados correctamente", Toast.LENGTH_SHORT).show();
et1.setText("");
et2.setText("");
} catch (IOException ioe) {
System.out.println("error");
}
}

public void recuperar(View v) {
String nomarchivo = et1.getText().toString();
File tarjeta = Environment.getExternalStorageDirectory();
File file = new File(tarjeta.getAbsolutePath(), nomarchivo);
try {
FileInputStream fIn = new FileInputStream(file);
InputStreamReader archivo = new InputStreamReader(fIn);
BufferedReader br = new BufferedReader(archivo);
String linea = br.readLine();
String todo = "";
while (linea != null) {
todo = todo + linea + "\n";
linea = br.readLine();
}
br.close();
archivo.close();
et2.setText(todo);

} catch (IOException e) {
System.out.println("error");
}
}

}

Dexafree
30/07/15, 11:26:50
Buenas!

Lo primero, te edito el código y te lo pongo entre etiquetas [ CODE]
Si tienes que pegar código en el foro, simplemente escribe



Tu codigo



Y aparecerá en un cajetín que respeta la indentación :ok:

Sobre lo que comentas, asegúrate de que en el Manifest has añadido el permiso correspondiente:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

PD: Tambien puedes usar un FileOutputStream y escribir los bytes del String, asi a ojo como idea

Además, si puedes pegar el contenido de la excepción, sería de ayuda para intentar determinar mejor el problema :ok:

javiviplz
30/07/15, 15:31:58
Muchas gracias,
El problema no estaba en el código sino en que el AVDmanager de AndroidStudio no me esta emulando la tarjeta SD.
Corriendo el programa en el dispositivo movil funciona correctamente.

Dexafree
30/07/15, 16:47:02
Marcamos como solucionado entonces :ok: