Ich könnte eine Textdatei in den Ordner res \ row eines Bibliotheksprojekts schreiben, aber das Lesen dieser Datei scheint eine Kontextreferenz zu erfordern. Könnte irgendjemand etwas Licht darauf werfen?Ist es möglich, eine Rohtextdatei ohne Kontextreferenz in einem Android-Bibliotheksprojekt zu lesen
Ist es möglich, eine Rohtextdatei ohne Kontextreferenz in einem Android-Bibliotheksprojekt zu lesen
Antwort
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.
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();
}
}
- 1. Ist es möglich, eine Tabelle nur im Ruhezustand zu lesen?
- 2. Ist es möglich, eine data.table von PostgreSQL zu lesen?
- 3. Ist es möglich, eine ISO in einem Andockbehälter zu montieren?
- 4. Ist es möglich, eine Datei "rückwärts" mit Lua zu lesen?
- 5. Ist es möglich, zu einem Commit ohne Reset zurückzukehren - hart?
- 6. Ist es möglich, einen Datensatz in Schienen zu ändern, ohne ihn vorher zu lesen?
- 7. Ist es möglich, einen Speicherwert in Echtzeit zu lesen?
- 8. Ist es möglich, eine Umgebungsvariable in einem Makefile "zu deaktivieren"?
- 9. Ist es möglich, eine Konstruktorfunktion in einem Merkmal zu haben?
- 10. Ist es möglich, GStreamer ohne eine GLib Hauptschleife zu verwenden?
- 11. Ist es möglich, in eine Datei zu schreiben, ohne den Lesestatus zu schließen? PHP
- 12. Ist es möglich, eine Eigenschaftsdatei von allen .war-Dateien in einem JBoss-Container eingesetzt zu lesen
- 13. Es ist möglich, Lesespeicheradresse ohne Readprocessmemory
- 14. Ist es möglich, eine Nachricht von einem Oozie Workflow zu protokollieren, ohne sie zu löschen?
- 15. Ist es möglich, gcc aus einer Pipe zu lesen?
- 16. ist es möglich, Symlink-Wert zu lesen, ohne Argumentstring zu kopieren?
- 17. Ist es möglich, Inhalt in einem Subversion-Repository zu löschen?
- 18. Ist es möglich, eine ScrollView zu einem AppBarLayout
- 19. Ist es möglich, Json zu analysieren, ohne CallAdapter in Retrofit2
- 20. Ist es möglich, Ansichten ohne XML in Android zu erstellen?
- 21. In Maven ist es möglich, Dateien zu verkleinern, ohne sie in eine größere Datei zu packen?
- 22. ASP.net ist es möglich, vorhandene Access-Datenbank zu lesen
- 23. Ist es möglich, Backbone "Lesen" Anfragen zu stoppen
- 24. Ist es möglich, eine maximale Upload-Größe in Plack :: Middleware zu erzwingen, ohne den gesamten Inhalt der Anfrage zu lesen?
- 25. Ist es möglich, WMI in einem Windows-Dienst zu verwenden?
- 26. Ist es möglich, GCC ohne Cygwin oder MinGW zu verwenden?
- 27. Ist es möglich, eine ListViewGroup zu erstellen
- 28. Ist es möglich, Xamarin.iOS auf einem Mac ohne Android
- 29. Ist es möglich, Cookies von Drittanbietern zu lesen
- 30. Ist es möglich, String von char zu lesen
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
@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
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