2012-03-24 6 views

Odpowiedz

19

Sprawdź moje odpowiedzi here, aby zobaczyć, jak odczytać plik z POJO.

Zazwyczaj folder res powinien być automatycznie dodany do ścieżki budowania projektu przez wtyczkę ADT. załóżmy, że masz Test.txt zapisany pod RES/folderu surowego, aby ją przeczytać bez android.content.Context:

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

zrobiłem tego wcześniej ze starej wersji SDK, to powinno działać z najnowszym SDK, jak również. Spróbuj i sprawdź, czy to pomaga.

+0

Dzięki za cynk. Właśnie próbowałem. Eclipse nie lubi umieszczania pliku w res, więc pozostawiłem plik w res \ raw. Otrzymuję pustą wartość, gdy próbuję uzyskać dostęp do pliku przez this.getClass(). GetClassLoader(). GetResourceAsStream ("text.txt") lub this.getClass(). GetClassLoader(). GetResourceAsStream ("raw \ text.txt") – Hong

+1

@Hong, próbowałem na moim Macu z SDK r16 i teraz mogę potwierdzić, że działa zarówno "res/raw/test.txt" i "raw/test.txt". natomiast "test.txt" wyrzuca NPE. Zauważ, że potrzebujesz ukośnika (/), a nie ukośnika (\\). – yorkw

+0

Tak! To działa! Działa również w statycznym konstruktorze, więc takiego odczytu nie trzeba wykonywać za każdym razem, gdy wywoływana jest metoda. Wielkie dzięki. – Hong

3

Aby uzyskać dostęp do zasobu, potrzebny jest kontekst. Zobacz tutaj definicję klasy Context.class z witryny developer.android:

Interfejs do globalnych informacji o środowisku aplikacji. Ta jest klasą abstrakcyjną, której implementację zapewnia system Android . Umożliwia on dostęp do zasobów specyficznych dla aplikacji i klas, jak również aktualne zaproszenia do operacji na poziomie aplikacji, takich jak działalności Rozpoczynając, nadawanie i odbieranie zamiarów itp

Więc poprzez kontekście można uzyskać dostęp plik zasobów. Możesz utworzyć kolejną klasę i przekazać kontekst z działania do niej. Utwórz metodę odczytującą określony plik zasobów.

Na przykład:

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

Dzięki za odpowiedź. Jak rozumiem twoją odpowiedź, nie można odczytać nieprzetworzonego tekstu bez kontekstu. – Hong

+1

Tak, potrzebny jest kontekst do odczytania pliku zasobów. – Radu

Powiązane problemy