我正在尝试从Http帖子回复到SD卡上的文件写一个文件.一切正常,直到检索到数据的字节数组.
我已尝试WRITE_EXTERNAL_STORAGE
在清单中设置权限,并尝试了我在网上找到的许多不同的教程组合.
我所能找到的只是使用活动的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字节.
//------------------------------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中写下此权限
该openFileOutput()
方法将数据写入应用程序的私有数据区(而不是SD卡),因此可能不是您想要的.您应该能够调用Environment.getExternalStorageDirectory()
以获取SD卡的根路径并使用它创建一个FileOutputStream
.从那里,只需使用标准的java.io例程.