
mayor aly
Quiero guardar un archivo en el almacenamiento interno obteniendo el texto ingresado desde EditText. Luego, quiero que el mismo archivo devuelva el texto ingresado en forma de cadena y lo guarde en otra cadena que se usará más adelante.
Aquí está el código:
package com.omm.easybalancerecharge;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText num = (EditText) findViewById(R.id.sNum);
Button ch = (Button) findViewById(R.id.rButton);
TelephonyManager operator = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String opname = operator.getNetworkOperatorName();
TextView status = (TextView) findViewById(R.id.setStatus);
final EditText ID = (EditText) findViewById(R.id.IQID);
Button save = (Button) findViewById(R.id.sButton);
final String myID = ""; //When Reading The File Back, I Need To Store It In This String For Later Use
save.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//Get Text From EditText "ID" And Save It To Internal Memory
}
});
if (opname.contentEquals("zain SA")) {
status.setText("Your Network Is: " + opname);
} else {
status.setText("No Network");
}
ch.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//Read From The Saved File Here And Append It To String "myID"
String hash = Uri.encode("#");
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:*141*" + /*Use The String With Data Retrieved Here*/ num.getText()
+ hash));
startActivity(intent);
}
});
}
He incluido comentarios para ayudarlo a analizar más a fondo mis puntos en cuanto a dónde quiero que se realicen las operaciones/se usen las variables.

R9J
Espero que esto pueda ser útil para usted.
Escribir archivo:
private void writeToFile(String data,Context context) {
try {
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(context.openFileOutput("config.txt", Context.MODE_PRIVATE));
outputStreamWriter.write(data);
outputStreamWriter.close();
}
catch (IOException e) {
Log.e("Exception", "File write failed: " + e.toString());
}
}
Leer archivo:
private String readFromFile(Context context) {
String ret = "";
try {
InputStream inputStream = context.openFileInput("config.txt");
if ( inputStream != null ) {
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String receiveString = "";
StringBuilder stringBuilder = new StringBuilder();
while ( (receiveString = bufferedReader.readLine()) != null ) {
stringBuilder.append("\n").append(receiveString);
}
inputStream.close();
ret = stringBuilder.toString();
}
}
catch (FileNotFoundException e) {
Log.e("login activity", "File not found: " + e.toString());
} catch (IOException e) {
Log.e("login activity", "Can not read file: " + e.toString());
}
return ret;
}

callejón de tiburones
Para aquellos que buscan una estrategia general para leer y escribir una cadena en un archivo:
Primero, obtenga un objeto de archivo
Necesitará la ruta de almacenamiento. Para el almacenamiento interno, utilice:
File path = context.getFilesDir();
Para el almacenamiento externo (tarjeta SD), utilice:
File path = context.getExternalFilesDir(null);
Luego crea tu objeto de archivo:
File file = new File(path, "my-file-name.txt");
Escribir una cadena en el archivo
FileOutputStream stream = new FileOutputStream(file);
try {
stream.write("text-to-write".getBytes());
} finally {
stream.close();
}
O con Google Guayaba
Contenido de la cadena = Files.toString(file, StandardCharsets.UTF_8);
Leer el archivo en una cadena
int length = (int) file.length();
byte[] bytes = new byte[length];
FileInputStream in = new FileInputStream(file);
try {
in.read(bytes);
} finally {
in.close();
}
String contents = new String(bytes);
O si está utilizando Google Guayaba
String contents = Files.toString(file,"UTF-8");
Para completar mencionaré
String contents = new Scanner(file).useDelimiter("\\A").next();
que no requiere bibliotecas, pero los puntos de referencia 50% – 400% más lento que las otras opciones (en varias pruebas en mi Nexus 5).
notas
Para cada una de estas estrategias, se le pedirá que capture una IOException.
La codificación de caracteres predeterminada en Android es UTF-8.
Si está utilizando almacenamiento externo, deberá agregar a su manifiesto:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
o
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
El permiso de escritura implica permiso de lectura, por lo que no necesita ambos.

eugenio
public static void writeStringAsFile(final String fileContents, String fileName) {
Context context = App.instance.getApplicationContext();
try {
FileWriter out = new FileWriter(new File(context.getFilesDir(), fileName));
out.write(fileContents);
out.close();
} catch (IOException e) {
Logger.logError(TAG, e);
}
}
public static String readFileAsString(String fileName) {
Context context = App.instance.getApplicationContext();
StringBuilder stringBuilder = new StringBuilder();
String line;
BufferedReader in = null;
try {
in = new BufferedReader(new FileReader(new File(context.getFilesDir(), fileName)));
while ((line = in.readLine()) != null) stringBuilder.append(line);
} catch (FileNotFoundException e) {
Logger.logError(TAG, e);
} catch (IOException e) {
Logger.logError(TAG, e);
}
return stringBuilder.toString();
}
Solo un poco de modificaciones en la lectura de cadenas desde un método de archivo para un mayor rendimiento
private String readFromFile(Context context, String fileName) {
if (context == null) {
return null;
}
String ret = "";
try {
InputStream inputStream = context.openFileInput(fileName);
if ( inputStream != null ) {
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
int size = inputStream.available();
char[] buffer = new char[size];
inputStreamReader.read(buffer);
inputStream.close();
ret = new String(buffer);
}
}catch (Exception e) {
e.printStackTrace();
}
return ret;
}
verifique el siguiente código.
Lectura de un archivo en el sistema de archivos.
FileInputStream fis = null;
try {
fis = context.openFileInput(fileName);
InputStreamReader isr = new InputStreamReader(fis);
// READ STRING OF UNKNOWN LENGTH
StringBuilder sb = new StringBuilder();
char[] inputBuffer = new char[2048];
int l;
// FILL BUFFER WITH DATA
while ((l = isr.read(inputBuffer)) != -1) {
sb.append(inputBuffer, 0, l);
}
// CONVERT BYTES TO STRING
String readString = sb.toString();
fis.close();
catch (Exception e) {
} finally {
if (fis != null) {
fis = null;
}
}
El siguiente código es escribir el archivo en el sistema de archivos interno.
FileOutputStream fos = null;
try {
fos = context.openFileOutput(fileName, Context.MODE_PRIVATE);
fos.write(stringdatatobestoredinfile.getBytes());
fos.flush();
fos.close();
} catch (Exception e) {
} finally {
if (fos != null) {
fos = null;
}
}
Creo que esto te ayudará.

nihilariano
Soy un poco principiante y luché para que esto funcionara hoy.
A continuación se muestra la clase con la que terminé. Funciona, pero me preguntaba cuán imperfecta es mi solución. De todos modos, esperaba que algunos de ustedes, gente más experimentada, estuvieran dispuestos a echar un vistazo a mi clase de IO y darme algunos consejos. ¡Salud!
public class HighScore {
File data = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator);
File file = new File(data, "highscore.txt");
private int highScore = 0;
public int readHighScore() {
try {
BufferedReader br = new BufferedReader(new FileReader(file));
try {
highScore = Integer.parseInt(br.readLine());
br.close();
} catch (NumberFormatException | IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
try {
file.createNewFile();
} catch (IOException ioe) {
ioe.printStackTrace();
}
e.printStackTrace();
}
return highScore;
}
public void writeHighScore(int highestScore) {
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
bw.write(String.valueOf(highestScore));
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

darshan
los Kotlin
mediante el uso de la función de extensión incorporada en File
Escribe: yourFile.writeText(textFromEditText)
Leer: yourFile.readText()
la pregunta es “¿cómo leer/escribir en/desde un archivo?”
– Dmitri Gudkov
17 de enero de 2013 a las 10:22
¿Consideró usar las preferencias de la aplicación para almacenar sus cadenas?
– sdabet
17 de enero de 2013 a las 10:23
Por cierto, asegúrese de dar permiso al archivo principal, para operar con almacenamiento…
– Dmitri Gudkov
17 de enero de 2013 a las 10:24
Esta es mi aplicación medio completa con muchos cambios para implementar. Mi idea es que el usuario ingrese la ID solo una vez en la primera ejecución de la aplicación. Luego, la aplicación hará referencia a esa ID almacenada tantas veces como el usuario ejecute la aplicación. Todos los permisos se agregan al manifiesto.
– Mayor Aly
17 de enero de 2013 a las 10:28