将文件写入 SD 卡

2022-09-02 02:39:22

我正在尝试将 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保存整个文件路径。 是来自响应的字符串回复。第二组代码参照 循环。文件已创建,但仍为 0 字节。seReplyHttpPostx


答案 1
//------------------------------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" />

答案 2

该方法将数据写入应用程序的私有数据区域(而不是 SD 卡),因此这可能不是您想要的。您应该能够调用以获取SD卡的根路径,并使用它来创建一个.从那里,只需使用标准 java.io 例程。openFileOutput()Environment.getExternalStorageDirectory()FileOutputStream