Можно ли прочитать необработанный текстовый файл без ссылки на контекст в проекте библиотеки Android - PullRequest
10 голосов
/ 25 марта 2012

Я мог бы поместить текстовый файл в папку res \ raw проекта библиотеки, но для его чтения, похоже, нужна ссылка на контекст.Кто-нибудь может пролить свет на это?

Ответы [ 2 ]

19 голосов
/ 25 марта 2012

Проверьте мой ответ здесь , чтобы узнать, как прочитать файл из 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. Попробуйте и посмотрите, поможет ли это.

3 голосов
/ 25 марта 2012

Для доступа к ресурсу нужен контекст.Смотрите здесь определение Context.class с сайта developer.android

Интерфейс для получения глобальной информации о среде приложения.Это абстрактный класс, реализация которого обеспечивается системой 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();
    }

}
...