将文件写入SD卡

我正在尝试从Httppost回复写一个文件SD卡上的文件。 一切正常,直到检索到数据的字节数组。

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

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

该应用程序已经走了很长的路,我无法改变应用程序当前的编写方式。

拜托,有人帮帮我吗?


代码

 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保存整个文件路径。 seReply是来自HttpPost响应的字符串回复。 第二组代码是参考x循环的。 文件已创建但仍为0字节。

openFileOutput()方法将数据写入应用程序的私有数据区(而不是SD卡),因此可能不是您想要的。 您应该能够调用Environment.getExternalStorageDirectory()来获取SD卡的根路径并使用它来创建FileOutputStream 。 从那里,只需使用标准的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中写下此权限

  

这是一个示例:

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