2012-03-24 5 views

Antwort

19

Schauen Sie sich meine Antwort here zu sehen, wie Datei von POJO zu lesen.

Im Allgemeinen sollte der Ordner res automatisch vom ADT-Plugin in den Projektbuildpfad eingefügt werden. Angenommen, Sie eine test.txt haben gespeichert unter res/raw Ordnern, ohne android.content.Context zu lesen:

String file = "raw/test.txt"; // res/raw/test.txt also work. 
InputStream in = this.getClass().getClassLoader().getResourceAsStream(file); 

ich dies tat, bevor sie mit einer alten SDK-Version, sollte es auch mit dem neuesten SDK arbeiten. Probieren Sie es aus und sehen Sie, ob das hilft.

+0

Danke für den Tipp. Ich habe es gerade versucht. Eclipse mag es nicht, eine Datei unter res zu stellen, also lasse ich die Datei in resRoh bleiben. Ich bekomme null, wenn ich versuche, auf die Datei mit this.getClass() zuzugreifen. GetClassLoader(). GetResourceAsStream ("text.txt") oder this.getClass(). GetClassLoader(). GetResourceAsStream ("raw \ text.txt") – Hong

+1

@Hong, ich habe auf meinem Mac mit SDK r16 versucht und jetzt kann ich bestätigen, dass sowohl "res/raw/test.txt" als auch "raw/test.txt" funktioniert. während "test.txt" NPE wirft. Beachten Sie, dass Sie einen Schrägstrich (/), nicht einen umgekehrten Schrägstrich (\\) benötigen. – yorkw

+0

Ja !!! Es klappt! Es funktioniert auch in einem statischen Konstruktor, so dass ein solches Lesen nicht jedes Mal ausgeführt werden muss, wenn die Methode aufgerufen wird. Danke vielmals. – Hong

3

Um auf eine Ressource zugreifen zu können, benötigen Sie einen Kontext. Sehen Sie hier die Definition von Context.class von der developer.android Seite

Schnittstelle zu globalen Informationen über eine Anwendungsumgebung. Diese ist eine abstrakte Klasse, deren Implementierung von dem Android System zur Verfügung gestellt wird. Es ermöglicht den Zugriff auf anwendungsspezifische Ressourcen und Klassen sowie up-Anrufe für Application-Level-Operationen wie Abschussaktivitäten, den digitalen Rundfunk und Empfangen von Absichten usw.

also durch einen Kontext können Sie zugreifen eine Ressourcendatei Sie können eine andere Klasse erstellen und den Kontext von einer Aktivität an sie übergeben. Erstellen Sie eine Methode, die eine angegebene Ressourcendatei liest.

Zum Beispiel:

public class ReadRawFile { 
    //Private Variable 
    private Context mContext; 

    /** 
    * 
    * Default Constructor 
    * 
    * @param context activity's context 
    */ 
    public ReadRawFile(Context context){ 
     this.mContext = context; 
    } 

    /** 
    * 
    * @param str input stream used from readRawResource function 
    * @param x integer used for reading input stream 
    * @param bo output stream 
    */ 
    private void writeBuffer(InputStream str, int x, ByteArrayOutputStream bo){ 
     //not hitting end 
     while(x!=-1){ 
      //write to output buffer 
      bo.write(x); 
      try { 
       //read next 
       x = str.read(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    /** 
    * 
    * @return output file to string 
    */ 
    public String readRawResource(){ 
     //declare variables 
     InputStream rawUniversities = mContext.getResources().openRawResource(R.raw.universities); 
     ByteArrayOutputStream bt = new ByteArrayOutputStream(); 
     int universityInteger; 

     try{ 
      //read/write 
      universityInteger = rawUniversities.read(); 
      writeBuffer(rawUniversities, universityInteger, bt); 

     }catch(IOException e){ 
      e.printStackTrace(); 
     } 
     //return string format of file 
     return bt.toString(); 
    } 

} 
+0

Danke für die Antwort. Als mein Verständnis Ihrer Antwort gibt es keine Möglichkeit, einen Rohtext ohne Kontext zu lesen. – Hong

+1

Ja, Sie benötigen einen Kontext, um eine Ressourcendatei zu lesen. – Radu

Verwandte Themen