web-dev-qa-db-fra.com

Écrire une chaîne dans un fichier

Je veux écrire quelque chose dans un fichier. J'ai trouvé ce code: 

private void writeToFile(String data) {
    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());
    } 
}

Le code semble très logique, mais je ne trouve pas le fichier config.txt dans mon téléphone.
Comment puis-je récupérer ce fichier contenant la chaîne?

21
jason

N'ayant pas spécifié de chemin , votre fichier sera enregistré dans votre application (/data/data/your.app.name/). 

Par conséquent, vous feriez mieux de sauvegarder votre fichier sur un stockage externe (ce qui n'est pas nécessairement la carte SD, ce peut être le stockage par défaut).

Vous voudrez peut-être creuser le sujet en lisant les documents officiels

En synthèse:

Ajoutez cette permission à votre manifeste:

    <uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />

Il inclut la permission READ, inutile donc de la spécifier.

Enregistrez le fichier dans un emplacement que vous spécifiez (il provient de mon code live, donc je suis sûr que cela fonctionne):

public void writeToFile(String data)
{
    // Get the directory for the user's public pictures directory.
    final File path =
        Environment.getExternalStoragePublicDirectory
        (
            //Environment.DIRECTORY_PICTURES
            Environment.DIRECTORY_DCIM + "/YourFolder/"
        );

    // Make sure the path directory exists.
    if(!path.exists())
    {
        // Make it, if it doesn't exit
        path.mkdirs();
    }

    final File file = new File(path, "config.txt");

    // Save your stream, don't forget to flush() it before closing it.

    try
    {
        file.createNewFile();
        FileOutputStream fOut = new FileOutputStream(file);
        OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);
        myOutWriter.append(data);

        myOutWriter.close();

        fOut.flush();
        fOut.close();
    }
    catch (IOException e)
    {
        Log.e("Exception", "File write failed: " + e.toString());
    } 
}

[EDIT] OK Essayez comme ceci (chemin différent - un dossier sur le stockage externe):

    String path =
        Environment.getExternalStorageDirectory() + File.separator  + "yourFolder";
    // Create the folder.
    File folder = new File(path);
    folder.mkdirs();

    // Create the file.
    File file = new File(folder, "config.txt");
38
Fantômas

Écrire un fichier texte simplifié:

private void writeToFile(String content) {
    try {
        File file = new File(Environment.getExternalStorageDirectory() + "/test.txt");

        if (!file.exists()) {
            file.createNewFile();
        }
        FileWriter writer = new FileWriter(file);
        writer.append(content);
        writer.flush();
        writer.close();
    } catch (IOException e) {
    }
}
1
murugan mani

Cette méthode prend File name & data String en tant qu'entrée et les vide dans un dossier de la carte SD . Vous pouvez modifier le nom du dossier si vous le souhaitez. 

Le type de retour est Boolean en fonction du succès ou de l'échec de FileOperation.

Remarque importante: essayez de le faire dans une tâche asynchrone en tant que fichier IO pour créer la cause ANR sur le thread principal.  

 public boolean writeToFile(String dataToWrite, String fileName) {

            String directoryPath =
                    Environment.getExternalStorageDirectory()
                            + File.separator
                            + "LOGS"
                            + File.separator;

            Log.d(TAG, "Dumping " + fileName +" At : "+directoryPath);

            // Create the fileDirectory.
            File fileDirectory = new File(directoryPath);

            // Make sure the directoryPath directory exists.
            if (!fileDirectory.exists()) {

                // Make it, if it doesn't exist
                if (fileDirectory.mkdirs()) {
                    // Created DIR
                    Log.i(TAG, "Log Directory Created Trying to Dump Logs");
                } else {
                    // FAILED
                    Log.e(TAG, "Error: Failed to Create Log Directory");
                    return false;
                }
            } else {
                Log.i(TAG, "Log Directory Exist Trying to Dump Logs");
            }

            try {
                // Create FIle Objec which I need to write
                File fileToWrite = new File(directoryPath, fileName + ".txt");

                // ry to create FIle on card
                if (fileToWrite.createNewFile()) {
                    //Create a stream to file path
                    FileOutputStream outPutStream = new FileOutputStream(fileToWrite);
                    //Create Writer to write STream to file Path
                    OutputStreamWriter outPutStreamWriter = new OutputStreamWriter(outPutStream);
                    // Stream Byte Data to the file
                    outPutStreamWriter.append(dataToWrite);
                    //Close Writer
                    outPutStreamWriter.close();
                    //Clear Stream
                    outPutStream.flush();
                    //Terminate STream
                    outPutStream.close();
                    return true;
                } else {
                    Log.e(TAG, "Error: Failed to Create Log File");
                    return false;
                }

            } catch (IOException e) {
                Log.e("Exception", "Error: File write failed: " + e.toString());
                e.fillInStackTrace();
                return false;
            }
        }
0
Hitesh Sahu