Ver la Versión Completa : [ CONSULTA ] Problema con edición de archivo de texto.
Bongiovi
16/07/13, 22:36:28
Quiero editar un archivo de texto cada vez que se ejecute una activity, para ello utilizo este código:
try
{
OutputStreamWriter file = new OutputStreamWriter(openFileOutput("archivo.txt", Context.MODE_PRIVATE));
file.write(index + "\n");
file.close();
}
catch (Exception ex)
{
}
El problema (supongo que es evidente), es que sobreescribe el archivo previamente creado, en vez de editarlo.
Cómo soluciono ésto?
Un saludo.
mocelet
16/07/13, 23:02:35
Context.MODE_PRIVATE sobreescribe, Context.MODE_APPEND escribe a partir del final
Bongiovi
17/07/13, 00:52:57
Vale, ya consigo crear el archivo o editarlo cuando corresponde. Ahora el problema viene con los caracteres, que salen en chino tanto al mostrarlo en una Activity como al abrirlo con cualquier Editor de Texto.
Ahí va el código:
- Creación/Edición del archivo.
File fichero = new File("/data/data/com.loquesea.loquesea/files/archivo.txt");
if(fichero.exists())
{
try
{
OutputStreamWriter file = new OutputStreamWriter(openFileOutput("archivo.txt", Context.MODE_APPEND));
file.write(index);
file.close();
Toast.makeText(getApplicationContext(), "archivo.txt EXISTE : " + index, Toast.LENGTH_SHORT).show();
}
catch (Exception ex)
{
Toast.makeText(getApplicationContext(), "EXISTE Y ERROR", Toast.LENGTH_SHORT).show();
}
}
else
{
try
{
OutputStreamWriter file = new OutputStreamWriter(openFileOutput("archivo.txt", Context.MODE_PRIVATE));
file.write(index + " iteraciones");
file.close();
Toast.makeText(getApplicationContext(), "archivo.txt NO EXISTE : " + index, Toast.LENGTH_SHORT).show();
}
catch (Exception ex)
{
Toast.makeText(getApplicationContext(), "NO EXISTE Y ERROR", Toast.LENGTH_SHORT).show();
}
}
Utilizo los Toast para "depurar" y parece que crea/edita cuando corresponde.
- Lectura del archivo (en otra Activity).
TextView view;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.scores_activity);
String texto;
String contenido = null;
view = (TextView) findViewById(R.id.Scores);
try
{
BufferedReader leer = new BufferedReader(new InputStreamReader(openFileInput("archivo.txt")));
while((texto = leer.readLine()) != null)
{
contenido += texto + "\n";
Toast.makeText(getApplicationContext(), "Se ha leído : " + texto, Toast.LENGTH_SHORT).show();
}
view.setText(contenido);
view.setVisibility(TextView.VISIBLE);
leer.close();
}
catch (Exception ex)
{
Toast.makeText(getApplicationContext(), "No lo lee", Toast.LENGTH_SHORT).show();
}
}
Ya digo que los caracteres aparecen en chino xD
mocelet
17/07/13, 07:48:42
Eso es por escribir un int a secas con el write, que lo interpreta como un codigo del caracter no como el número.
Haz un write("" + index) o simplemente usa una variable de tipo String
Bongiovi
17/07/13, 12:47:45
Eso es por escribir un int a secas con el write, que lo interpreta como un codigo del caracter no como el número.
Haz un write("" + index) o simplemente usa una variable de tipo String
Eso era, gracias ;)
Además he sustituido el String "contenido" por un StringBuilder, que da mejor resultado.
vBulletin® v3.8.1, Copyright ©2000-2026, Jelsoft Enterprises Ltd.