0

外部ストレージ上のファイルに書き込むために、次のコードを記述しました。

    public static BufferedWriter out;
    private void createFileOnDevice(Boolean append) throws IOException {
            File Root = Environment.getExternalStorageDirectory();
            Log.d("File",Root.toString());
            Root.setWritable(true);
            Root.setReadable(true);
            Log.d("File","Writable: " + Root.canWrite());
            if(Root.canWrite()){
                 File  LogFile = new File(Root, "/Android/DriverInterfaceSystem");
                 if(!LogFile.mkdirs()){
                     Log.d("File","Couldn't make directories");
                 }
                 LogFile = new File(LogFile, "/trace.txt");

                 Log.d("File",LogFile.toString());
                 try{
                     FileWriter LogWriter = new FileWriter(LogFile, true);
                     LogWriter.write("--- New Record ---");
                     out = new BufferedWriter(LogWriter);
                 } catch(IOException e){
                     Log.d("File","FileWriter failed");
                 }

                 out.write("New record");

            }
    }

マニフェストの権限をに設定しましたWRITE_EXTERNAL_STORAGE

FileWriterとBufferedWriterの両方を持つことは冗長であることを私は知っていますが、それが機能しないのはそれらの1つだけであるかどうかをテストしていました。

実行すると、ファイルは正しい場所に作成されますが、プログラムは「-New Record-」または「NewRecord」のいずれかをファイルに書き込むことを拒否し、ファイルは空になります。

ファイルが作成されていることを考えると、本当に簡単な手順が1つ欠けているように見えますが、それを見ることができれば気になります。何かご意見は?

4

2 に答える 2

2

あなたはあなたのに電話するのflush()を忘れました。close()FileWriter


編集#1:

また、次のコードは不要であることも指摘しておきます。

root.setWritable(true);
root.setReadable(true);

の呼び出しは、デフォルトgetExternalStorageDirectory()で読み取り可能/書き込み可能を返しFileます(アプリケーションに適切なアクセス許可が与えられていることを前提としています)。


編集#2:

最後のもの。外部ストレージで作業を行う前に、必ず電話getExternalStorageState()をかけてメディアが利用可能かどうかを確認してください。メディアがコンピューターにマウントされているか、欠落しているか、読み取り専用であるか、またはその他の状態である可能性があります。詳細については、ドキュメントを参照してください。

于 2012-05-24T23:45:14.737 に答える
1

実際にファイルに書き込むには、flush()を呼び出す必要があると思います。write(...)を呼び出すだけで、書き込まれるバッファに追加されるだけだと思います。使用法の簡単な例を次に示します。

FileWriter fWriter;
try{
    fWriter = new FileWriter(“\sdcard\filename.txt”);
    fWriter.write(yourString);
    fWriter.flush();
    fWriter.close();
}catch(Exception e){
    e.printStackTrace();
}

お役に立てれば。

于 2012-05-24T23:40:58.713 に答える