Чтение и запись в текстовые файлы на SD-карте Samsung Galaxy S

Я думаю, что это не должно быть очень сложной задачей, и мне удалось это сделать с помощью HTC Desire, но по какой-то причине я не могу читать с SD-карты Samsung Galaxy S в своем приложении для Android.

Я использую :

public String writeFile1(String text) {

    File sdDir = Environment.getExternalStorageDirectory(); 

    File myFile = new File(sdDir+"/TextFiles/patientDetails.txt");
    try{
        myFile.createNewFile();
        FileOutputStream fOut = new FileOutputStream(myFile);
        OutputStreamWriter myOutWriter = 
                                new OutputStreamWriter(fOut);
        myOutWriter.write(text);
        myOutWriter.close();
        fOut.close();
        return "success";
    }catch (IOException e){
        e.printStackTrace();
        return "fail";
    }
}

и это работает нормально! Содержимое файла сохраняется, и я очень счастлив. Однако, когда я делаю обратное, используя...

//
               File f = new File(Environment.getExternalStorageDirectory()+fileName);

           FileInputStream fileIS = new FileInputStream(f);

           BufferedReader buf = new BufferedReader(new InputStreamReader(fileIS));

           String readString = new String(); 

           //just reading each line and pass it on the debugger
           String s = "";
           while((readString = buf.readLine())!= null){
               s+=readString;   
           }
           return s;

        } catch (FileNotFoundException e) {

           e.printStackTrace();

        } catch (IOException e){

           e.printStackTrace();
        }

Я получаю исключение файл не найден! Я только что написал на него и могу видеть, что я написал, когда я монтирую SD-карту.

Кто-нибудь знает решение этого? Спасибо


person Elaine McGovern    schedule 10.10.2011    source источник
comment
На всякий случай, не могли бы вы Log.d(f.toString()) в своем методе чтения?   -  person Laurent'    schedule 10.10.2011
comment
Файл myFile = новый файл (sdDir+/TextFiles/patientDetails.txt); это тот же путь, который вы используете для чтения файла File f = new File(Environment.getExternalStorageDirectory()+fileName); ? Будьте уверены в этом. Итак, я думаю, что fileName=/TextFiles/patientDetails.txt, верно?   -  person user370305    schedule 10.10.2011


Ответы (2)


Вы используете неправильный конструктор, который вы должны использовать

File f = new File(Environment.getExternalStorageDirectory(), "filename");

вместо

 File f = new File(Environment.getExternalStorageDirectory()+fileName);

Теперь ваш код будет работать нормально.

person Ashwin N Bhanushali    schedule 10.10.2011

Что происходит, когда вы инициализируете свой файловый объект, как это

Environment.getExternalStorageDirectory()+fileName

в этом то, что происходит сначала, вы получаете путь таким образом

/sdcard

и соедините с именем файла, тогда вы получите результат таким образом

filename = "test.txt";

path > /sdcardtext.txt

теперь убедитесь, что этот файл не найден, поэтому будьте осторожны, проверьте полный путь к файловому объекту.

следующая вещь, которую вы можете использовать таким образом

File f = new File(Environment.getExternalStorageDirectory(), "filename");
person Pratik    schedule 10.10.2011
comment
Хорошо, я думаю, что нашел решение - по какой-то причине мне пришлось использовать Environment.getExternalStorageDirectory().getAbsolutePath(), это гарантировало, что он искал папку mnt\sdcard\text.txt, где Samsung Galaxy S любит хранить файлы, а не только sdcard\text.txt, где HTC Desire хранит файлы. - person Elaine McGovern; 18.10.2011