写一个文件到SD卡

我试图写一个文件从Http post回复到SD卡上的文件。 一切工作正常,直到数据的字节数组被检索。

我已经尝试在清单中设置WRITE_EXTERNAL_STORAGE权限,并尝试了我在网上find的许多不同的教程组合。

所有我能find的是使用openFileOutput("",MODE_WORLD_READABLE)方法,但我的应用程序如何写入文件是通过使用线程。 具体来说,当一个文件被写入时,一个线程从另一个线程被调用,所以即使我尝试了一个活动对象也不起作用。

该应用程序已经走了很长的路,我不能改变如何编写应用程序。

请有人帮我?


CODE

 File file = new File(bgdmanip.savLocation); FileOutputStream filecon = null; filecon = new FileOutputStream(file); byte[] myByte; myByte = Base64Coder.decode(seReply); bos.write(myByte); filecon.write(myByte); myvals = x * 11024; 

bgdmanip.savLocation包含整个文件path。 seReply是从HttpPost响应的string答复。 第二组代码循环参考x 。 该文件被创build,但仍然是0字节。

openFileOutput()方法将数据写入应用程序的私有数据区(而不是SD卡),所以这可能不是你想要的。 您应该可以调用Environment.getExternalStorageDirectory()来获取SD卡的根path,并使用它创buildFileOutputStream 。 从那里,只需使用标准的java.io例程。

 //------------------------------WRITING DATA TO THE FILE --------------------------------- btnWriteSDFile.setOnClickListener(new OnClickListener() { public void onClick(View v) { try { File myFile = new File("/sdcard/mysdfile.txt"); myFile.createNewFile(); FileOutputStream fOut = new FileOutputStream(myFile); OutputStreamWriter myOutWriter =new OutputStreamWriter(fOut); myOutWriter.append(txtData.getText()); myOutWriter.close(); fOut.close(); Toast.makeText(v.getContext(),"Done writing SD 'mysdfile.txt'", Toast.LENGTH_SHORT).show(); txtData.setText(""); } catch (Exception e) { Toast.makeText(v.getContext(), e.getMessage(),Toast.LENGTH_SHORT).show(); } } }); //---------------------------READING DATA FROM THE FILE PLACED IN SDCARD-------------------// btnReadSDFile.setOnClickListener(new OnClickListener() { public void onClick(View v) { try { File myFile = new File("/sdcard/mysdfile.txt"); FileInputStream fIn = new FileInputStream(myFile); BufferedReader myReader = new BufferedReader(new InputStreamReader(fIn)); String aDataRow = ""; String aBuffer = ""; while ((aDataRow = myReader.readLine()) != null) { aBuffer += aDataRow ; } txtData.setText(aBuffer); myReader.close(); Toast.makeText(v.getContext(),"Done reading SD 'mysdfile.txt'",Toast.LENGTH_SHORT).show(); } catch (Exception e) { Toast.makeText(v.getContext(), e.getMessage(),Toast.LENGTH_SHORT).show(); } } }); 

随着这也写在Android.Manifest的权限

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

这是一个示例:

 // Log used as debug File log = new File(Environment.getExternalStorageDirectory(), "Log.txt"); try { out = new BufferedWriter(new FileWriter(log.getAbsolutePath(), false)); out.write(new Date().toString()); out.write(" : \n"); } catch (Exception e) { Log.e(TAG, "Error opening Log.", e); }