1
votes

Android Studio - enregistrez les informations utilisateur dans un fichier CSV et lisez-le

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!


2 commentaires

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?


3 Réponses :


0
votes

Utilisez comme ceci pour lire le fichier:

FileInputStream fis = new FileInputStream("your full file path");
BufferedReader bfr = new BufferedReader(new InputStreamReader(fis));


0 commentaires

0
votes

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();
                }
            }
        });


0 commentaires

0
votes

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();
}


0 commentaires