我可以将文本文件放在库项目的res \ raw文件夹中,但是阅读它似乎需要一个Context引用。任何人都可以对此有所了解吗?
答案 0 :(得分:19)
查看我的答案here,了解如何从POJO中读取文件。
通常,res文件夹应该由ADT插件自动添加到项目构建路径中。假设你有一个test.txt存储在res / raw文件夹下,无需android.content.Context即可读取它:
String file = "raw/test.txt"; // res/raw/test.txt also work.
InputStream in = this.getClass().getClassLoader().getResourceAsStream(file);
我之前使用旧的SDK版本,它也应该使用最新的SDK。试一试,看看这是否有帮助。
答案 1 :(得分:3)
要访问资源,您需要一个上下文。请参阅developer.android站点
中Context.class的定义有关应用程序环境的全局信息的接口。这个 是一个抽象类,其实现由Android提供 系统。它允许访问特定于应用程序的资源和 类,以及应用程序级操作的上调,如 发起活动,广播和接收意图等。
因此,通过上下文,您可以访问资源文件。您可以创建另一个类并将上下文从活动传递给它。创建一个读取指定资源文件的方法。
例如:
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();
}
}