1

この次のコード スニペットは、ファイルを正常に作成しているように見え、writeData関数は適切に書き込みStringWriterますが、ファイルは空のようです..

fileOutputStream = new FileOutputStream(selectedFile);

if(!selectedFile.exists())
    selectedFile.createNewFile();


StringWriter writer = new StringWriter();
serializer.setOutput(writer);

Log.i(TAG, "- Output is asigned to the special Serializer object");     

/* The target data is written to the a string buffer in the StringWriter */
writeData(serializer, templateData); 

Log.i(TAG, String.format("- New file Data written: %s", writer.toString())); // Logcat prints the file data from this string beautifully..      

fileOutputStream.write(writer.toString().getBytes()); // Not happening?! Why :(
fileOutputStream.close();

文字列は間違いなく空ではありません!

ただし、作成されたファイルは空です。などのバリエーションも試しましOuputStreamWriterたが、ファイルが書き込まれません。なんで?Nexus 7 タブレットでこれをテストしており、WRITE_EXTERNAL_STORAGEアクセス許可が設定されています。

更新: このプロセスですべてのファイルが作成されます。ファイルのアクセス権は「_rw」として作成されます。

まったく同じ結果が得られる、私が使用した他の方法:

FileWriter fw = new FileWriter(selectedFile.getPath());
fw.write(writer.toString());
fw.flush();
fw.close();

いずれの場合も、ファイルは createNewFile() によって作成されますが、データは書き込まれません。アプリは何もスローせずに通常どおり続行します。私は理解していません:'(

4

2 に答える 2

0
FileOutputStream fOut = openFileOutput(selectedFile);//u can use (filename, Context.MODE_APPEND | Context.MODE_WORLD_READABLE)

if(!selectedFile.exists())
    selectedFile.createNewFile();

OutputStreamWriter osw = new OutputStreamWriter(fOut);
      osw.append(templateData);
      osw.flush();
      osw.close();
于 2012-10-17T17:14:32.893 に答える
0

ファイルに書き込んだ後に FileOutputStream.FileOutputStream(File) を呼び出すと、すべてのデータが消去されます。このスレッドをチェックしてください:古いデータを失わずに FileOutputStream でデータを書き込むには?

于 2012-10-17T21:30:13.340 に答える