2013-03-06 2 views
1

Я пытаюсь прочитать простой текстовый файл с SD-карты с помощью Java, и я не могу ее открыть. Я использую Eclipse для мобильных разработчиков на Ubuntu 12.04. Вот код в onCreate() методе основной деятельности:Чтение с SD-карты

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    String status = "Hello, is it me you're looking for?"; 
    String storageState = Environment.getExternalStorageState(); 

    File dir = Environment.getExternalStorageDirectory(); 
    File f = new File(dir, "textTest.txt"); 

    if (f.exists()) { 
     status = "File is found!"; 
    } else { 
     status = "File is not found!"; 
    } 

    this.text1 = (TextView) findViewById(R.id.textView1); 
    text1.setText(status.subSequence(0, status.length())); 
} 

Кроме того, вот некоторые из конструкторов я пытался для File f, ни один из них не работал:

File f = new File(dir, "textTest.txt"); 
File f = new File("/sdcard/textTest.txt"); 
File f = new File(dir, "mnt/sdcard/textTest.txt"); 

Наконец, я проверил внешний состояние хранения с использованием строки storageState выше, а значение, возвращаемое Environment.getExternalStorageState(), равно mounted. Единственное, что у меня есть, это, я думаю, может быть что-то связано с тем, читается ли SD-карта или нет, но это всего лишь предположение. Есть идеи?

Добавлено: В случае, если вы еще не догадались, то TextView объект читает «Файл не найден!», Когда я запускаю деятельность.

Добавлено 2: Хорошо, я просто попробовал что-то, что сработало. Когда я подключаю телефон через USB, открываются две папки, связанные с телефоном: одна, у которой есть все папки из внутреннего хранилища (данные, DCIM ... и т. Д.) И папка, которая, как я полагаю, подключена к SD-карте, поскольку Я добавил файлы через свой считыватель карт для ноутбуков, а затем ввел его в телефон. Однако, когда я копирую файл testText.txt в первую папку (которая, как я полагаю, связана с внутренней памятью), работает конструктор File f = new File("/sdcard/textTest.txt");. Как так?

+2

сделать и есть 'write_external_storage' в вашем манифесте? –

+0

Нет, но я все равно не пытаюсь писать в файл. Я пытаюсь читать. И в соответствии с этой ссылкой: http://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory%28%29, read_external_storage для будущих выпусков – naxchange

+0

Если вы посмотрите на logcat, возможно, это предупредит вас если вам нужно объявить какие-либо разрешения. –

ответ

0

основе замечаний ..

Добавьте это в AndroidManifest.xml

android.permission.READ_EXTERNAL_STORAGE 

Кроме того, если вы нечто с операции записи добавить это разрешение

android.permission.WRITE_EXTERNAL_STORAGE 
+1

«android.permission.READ_EXTERNAL_STORAGE» не применяется в этом момент времени, и он был недавно добавлен в ** API ** ** 16 **. Любое приложение, объявляющее 'android.permission.WRITE_EXTERNAL_STORAGE'персию, неявно предоставлено READ-разрешением. – kaderud