2010-11-02 5 views
25

У меня есть файл ресурсов в папке/res/raw/folder (/res/raw/textfile.txt), который я пытаюсь прочитать из моего приложения для Android для обработки.Доступ к файлам ресурсов в Android

public static void main(String[] args) { 

    File file = new File("res/raw/textfile.txt"); 

    FileInputStream fis = null; 
    BufferedInputStream bis = null; 
    DataInputStream dis = null; 

    try { 
     fis = new FileInputStream(file); 
     bis = new BufferedInputStream(fis); 
     dis = new DataInputStream(bis); 

     while (dis.available() != 0) { 
       // Do something with file 
      Log.d("GAME", dis.readLine()); 
     } 

     fis.close(); 
     bis.close(); 
     dis.close(); 

    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    } 

Я пробовал различные синтаксис пути, но всегда получаю ошибкуjava.io.FileNotFoundException. Как я могу получить доступ к /res/raw/textfile.txt для обработки? Файл файла = новый файл («res/raw/textfile.txt»); неправильный метод в Android?


* Ответ: *

// Call the LoadText method and pass it the resourceId 
LoadText(R.raw.textfile); 

public void LoadText(int resourceId) { 
    // The InputStream opens the resourceId and sends it to the buffer 
    InputStream is = this.getResources().openRawResource(resourceId); 
    BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
    String readLine = null; 

    try { 
     // While the BufferedReader readLine is not null 
     while ((readLine = br.readLine()) != null) { 
     Log.d("TEXT", readLine); 
    } 

    // Close the InputStream and BufferedReader 
    is.close(); 
    br.close(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

Рассмотрим нас [Apache Commons] (http://commons.apache.org/proper/commons-io/). Найдите 'IOUtils' там. – JJD

ответ

23

Если у вас есть файл в res/raw/textfile.txt от вашей деятельности/Widget вызова:

getResources().openRawResource(...) возвращает InputStream

Точки должны быть фактически целое число находится в R.raw ... соответствующий вашему имени файла, возможно R.raw.textfile (обычно это имя файла без расширения)

new BufferedInputStream(getResources().openRawResource(...)); затем прочитать содержимое файла в виде потока

+0

Я пробовал: File file = new File (R.raw.textfile); - Я попытаюсь использовать getResources(). OpenRawResource (R.raw.textfile) и предоставить это файлу, если смогу. – Selzier

+0

Независимо от того, как я использую «getResources(). OpenRawResource (R.raw.textfile)« eclipse всегда дает ошибку »Метод getResources() не определен для типа MyClass». – Selzier

+0

getResources() - это метод класса Context. Вы можете получать ресурсы только в контексте. – Falmarri

10

Просто тот факт, что у вас есть это public static void main(String[] args) означает, вы разрабатываете ваш код крайне неправильно. Вы почти наверняка не прошли ни одного из приветственных упражнений для Android. Вы обязательно должны это сделать.

+1

+1 хороший улов! Какой-то забавный видя главный метод в приложении Android для Android XD – Cristian

+0

Я прошел через все приветственные андроидские руководства, в том числе каждый из учебных пособий, учебников по протоколированию ошибок и учебник по блокноту. Я не эксперт по Java, хотя и не понимаю, почему использование public static void main (String [] args) неверно. – Selzier

+2

, потому что это не то, как Android запускает приложения. Теперь вы можете включить это, возможно, для запуска собственного тестирования или чего-то еще (почему бы и нет?), Но в мире Android ваша программа никогда не контролируется. Когда происходит определенное событие (например, когда пользователь нажимает кнопку), вызывается соответствующий метод обратного вызова в вашем приложении. Когда ваш обратный вызов завершен, управление возвращается на Android. –

Смежные вопросы