Leer/Escribir y comparar el almacenamiento externo de Android
public class PaymentActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_payment);
String FILENAME = "paid";
String data = "yes";
File folder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
try {
File myFile = new File(folder, FILENAME);
FileOutputStream fstream = new FileOutputStream(myFile);
fstream.write(data.getBytes());
fstream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
File myFile = new File(folder, FILENAME);
FileInputStream fstream = new FileInputStream(myFile);
StringBuilder sbuffer = new StringBuilder();
int i;
while ((i = fstream.read()) != -1){
sbuffer.append((char)i);
}
String haspaid = sbuffer.toString();
System.out.println("¡Ayuda! ¿" + haspaid.equals("yes") + "?");
if (haspaid.equals("yes")) {
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
}
fstream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Tengo un archivo de escritura que ingresa “yes” y un archivo de lectura que lee ese “yes” en el almacenamiento externo. Imprimo System.out.println para verificarlo y la lectura/escritura del archivo parece funcionar. Sin embargo, de alguna manera, cuando comparo la cadena resultante, no puede comprobar si es un valor válido.
¿Qué estoy haciendo mal?
davy.ai
Es difícil determinar el problema exacto sin más contexto, pero podría ser un problema con la codificación de las cadenas. Se recomienda utilizar la misma codificación al escribir y leer el archivo. En este caso, el método
getBytes()
se utiliza para escribir los datos, pero se utiliza la codificación predeterminada que puede ser diferente de la codificación utilizada para leer el archivo. Para garantizar la consistencia, se recomienda especificar la codificación al escribir y leer el archivo, como por ejemplo conCharset.forName("UTF-8").getBytes()
ynew InputStreamReader(fstream, Charset.forName("UTF-8"))
. Además, es importante asegurarse de que el archivo exista y sea accesible.