Je suis un débutant en programmation sur Android Studio. J'essaie de créer une application simple pour acquérir une expérience de base. Dans l'application, j'aurais besoin de stocker des entrées individuelles dans un fichier (idéalement CSV) dans la mémoire interne. Tout d'abord, j'essaie d'enregistrer les données utilisateur - mon nom et mon numéro de téléphone. La méthode de sauvegarde ressemble à ceci:
protected void onCreate(Bundle savedInstanceState) {
File file = new File(getFilesDir(),"user.csv");
if(!file.exists()) {
Intent intent = new Intent(this, activity_login.class);
startActivity(intent);
}
else {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv_name = findViewById(R.id.tv_name);
TextView tv_phone = findViewById(R.id.tv_phone);
BufferedReader br = null;
try {
String sCurrentLine;
br = new BufferedReader(new FileReader("user.csv"));
while ((sCurrentLine = br.readLine()) != null) {
tv_name.setText(sCurrentLine);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
Les données semblent être enregistrées et je suis redirigé vers MainActivity . Voici la méthode:
public void save(View view)
{
String fileName = "user.csv";
ContextWrapper contextWrapper = new ContextWrapper(getApplicationContext());
File directory = contextWrapper.getDir(getFilesDir().getName(), ContextWrapper.MODE_PRIVATE);
File file = new File(directory, fileName);
String data = "FirstName,LastName,PhoneNumber";
FileOutputStream outputStream;
try {
outputStream = openFileOutput(fileName, Context.MODE_PRIVATE);
outputStream.write(data.getBytes());
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
}
Aucune valeur n'est stockée dans TextView tv_name et la boîte est vide. Où est-ce que je me trompe?
Merci beaucoup pour votre aide!
3 Réponses :
Utilisez comme ceci pour lire le fichier:
FileInputStream fis = new FileInputStream("your full file path");
BufferedReader bfr = new BufferedReader(new InputStreamReader(fis));
Vous trouverez ci-dessous le code pour créer un fichier .csv et y insérer des données.
Pour plus d'informations, consultez ma réponse: https: //stackoverflow.com/a/48643905/8448886
CODE ICI:
String csv = (Environment.getExternalStorageDirectory().getAbsolutePath() + "/MyCsvFile.csv"); // Here csv file name is MyCsvFile.csv
//by Hiting button csv will create inside phone storage.
buttonAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
CSVWriter writer = null;
try {
writer = new CSVWriter(new FileWriter(csv));
List<String[]> data = new ArrayList<String[]>();
data.add(new String[]{"Country", "Capital"});
data.add(new String[]{"India", "New Delhi"});
data.add(new String[]{"United States", "Washington D.C"});
data.add(new String[]{"Germany", "Berlin"});
writer.writeAll(data); // data is adding to csv
writer.close();
callRead();
} catch (IOException e) {
e.printStackTrace();
}
}
});
Pour lire les données enregistrées, utilisez cette méthode utilise, UTF_8 ENCODING
public static String readFileAsString(File file) throws IOException {
return readAsString(new FileInputStream(file));
}
Utilisez cette méthode comme suit, en analysant le fichier "user.csv".
public static String readAsString(InputStream is) throws IOException {
BufferedReader reader = null;
StringBuilder sb = new StringBuilder();
try {
String line;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
reader = new BufferedReader(new InputStreamReader(is,UTF_8));
}
while ((line = reader.readLine()) != null) {
sb.append(line);
}
} finally {
if (reader != null) {
reader.close();
}
}
return sb.toString();
}
essayez d'utiliser la base de données locale, elle sera plus facile à implémenter et plus sécurisée que d'écrire en csv.
avez-vous essayé d'utiliser le même code que d'écrire dans le fichier pour l'ouvrir, avec ContextWrapper? Le fichier sur le onCreate contient-il des données?