Подтвердить что ты не робот

Запись файла на SDCard

Я пытаюсь написать файл из ответа на публикацию Http в файл sdcard. Все работает нормально, пока массив байтов данных не будет восстановлен.

Я пробовал установить в манифесте разрешение WRITE_EXTERNAL_STORAGE и попробовал много разных комбинаций учебников, которые я нашел в сети.

Все, что я мог найти, это использовать метод 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 содержит весь путь к файлам. seReply - это ответ строки из ответа HttpPost. Второй набор кода зацикливается со ссылкой на x. Файл создается, но остается 0 байтов.

4b9b3361

Ответ 1

Метод openFileOutput() записывает данные в область личных данных приложения (а не SD-карту), поэтому, вероятно, не то, что вы хотите. Вы должны иметь возможность вызвать Environment.getExternalStorageDirectory(), чтобы получить корневой путь к SD-карте и использовать его для создания FileOutputStream. Оттуда просто используйте стандартные java.io-процедуры.

Ответ 2

//------------------------------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" />

Ответ 3

Вот пример:

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