web-dev-qa-db-ja.com

文字列をファイルに書き込む

ファイルに何かを書きたい。私はこのコードを見つけました:

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

コードは非常に論理的なように見えますが、電話でconfig.txtファイルが見つかりません。
文字列を含むファイルを取得するにはどうすればよいですか?

22
jason

パスを指定していない場合、ファイルはアプリスペースに保存されます(/data/data/your.app.name/)。

したがって、ファイルを外部ストレージ(必ずしもSDカードである必要はありません。デフォルトのストレージにできます)に保存することをお勧めします。

official docs を読んで、主題を掘り下げてみてください。

合成では:

この許可をマニフェストに追加します。

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

READパーミッションが含まれているため、指定する必要もありません。

指定した場所にファイルを保存します(これは私のライブタラから取得されるため、動作するはずです):

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

[編集]OKこのように試してください(異なるパス-外部ストレージ上のフォルダー):

    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");
40
Fantômas

1つのテキストファイルを単純化して記述します。

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) {
    }
}
3
murugan mani

このメソッドは、入力としてファイル名とデータ文字列を取り、SDカード上のフォルダにダンプします。必要に応じて、フォルダーの名前を変更できます。

戻りタイプは、FileOperationの成功または失敗に応じてブールです。

重要な注意:非同期タスクでファイルIOメインスレッドでANRを発生させます。

 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