是否可以在Android库项目中读取没有上下文引用的原始文本文件

时间:2012-03-24 20:14:27

标签: android eclipse android-resources

我可以将文本文件放在库项目的res \ raw文件夹中,但是阅读它似乎需要一个Context引用。任何人都可以对此有所了解吗?

2 个答案:

答案 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();
    }

}