2010-11-02 7 views
25

J'ai un fichier de ressources dans mon dossier/res/raw/(/res/raw/textfile.txt) que j'essaie de lire depuis mon application Android pour le traitement.Accéder aux fichiers de ressources sous 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(); 
    } 
    } 

J'ai essayé une syntaxe différente de chemin, mais toujours une erreur java.io.FileNotFoundException. Comment puis-je accéder au fichier /res/raw/textfile.txt pour le traitement? Est Fichier fichier = nouveau fichier ("res/raw/textfile.txt"); la mauvaise méthode dans Android?


* Réponse: *

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

Considérez-nous ing [Commons d'Apache] (http://commons.apache.org/proper/commons-io/). Rechercher "IOUtils" là. – JJD

Répondre

23

Si vous avez un fichier dans res/raw/textfile.txt de votre activité/call Widget:

getResources().openRawResource(...) retourne un InputStream

Les points doivent effectivement être un entier trouvé dans R.raw ... correspondant à votre nom, peut-être R.raw.textfile (il est généralement le nom du fichier sans extension)

new BufferedInputStream(getResources().openRawResource(...)); puis lire le contenu du fichier en tant que flux

+0

J'ai essayé: fichier fichier = nouveau fichier (R.raw.textfile); - Je vais essayer d'utiliser getResources(). OpenRawResource (R.raw.textfile) et le donner à File si je le peux. – Selzier

+0

Peu importe comment j'utilise "getResources(). OpenRawResource (R.raw.textfile)" eclipse donne toujours l'erreur "La méthode getResources() est indéfinie pour le type MyClass". – Selzier

+0

getResources() est une méthode de la classe Context. Vous ne pouvez obtenir les ressources que par rapport à un contexte. – Falmarri

10

Juste le fait que vous avez ce public static void main(String[] args) signifie que vous implémentez votre code extrêmement mauvais. Vous avez presque certainement pas passé par l'un des tutoriels Android bonjour. Vous devriez certainement faire ça.

+1

+1 bonne prise! Un peu drôle de voir une méthode principale sur une application Android XD – Cristian

+0

J'ai été à travers tous les tutoriels bonjour Android, y compris chacun des tutoriels de vue, les didacticiels de journalisation des erreurs, et le tutoriel du bloc-notes. Je ne suis pas expert Java et je ne comprends pas pourquoi l'utilisation de public static void main (String [] args) est fausse. – Selzier

+2

parce que ce n'est pas la façon dont Android exécute les applications. Maintenant, vous pouvez inclure ceci, peut-être, pour lancer vos propres tests ou quelque chose (pourquoi pas?) Mais dans le monde Android, votre programme n'est jamais vraiment en contrôle. Lorsqu'un certain événement se produit (par exemple lorsque l'utilisateur appuie sur un bouton), la méthode de rappel correspondante dans votre application est appelée. Lorsque votre rappel est terminé, le contrôle revient à Android. –