在android库中访问和检索文件

时间:2013-06-11 19:04:48

标签: android

我必须在这里表现出一些我无法掌握的小技术错误。该文件位于AndroidLibrary的raw /目录中,以这种方式正好使用对不同文件的访问。也许这里有轻微的错误,我一直在上釉?

注意:原始资源采用未压缩格式,因此可以使用.jet扩展名读取,以便内部文件系统不会抱怨。

编辑(更新):显然,为了打开流,openRawResourceFd还不够。除此之外,我需要调用assetDescriptor.createInputStream();如果我没有,流将不会正常运行。奇怪的是,我希望openRawResourceFd可以做到这一点。

        AssetFileDescriptor assetDescriptor = resources.openRawResourceFd(com.grubulon.R.raw.testing_patches);
        BufferedReader bufferedInputStream = new BufferedReader(new FileReader(assetDescriptor.getFileDescriptor()));

        colorSpace = bufferedInputStream.readLine();

        while ((currentLine = bufferedInputStream.readLine()) != null) 
        {
            rgbValues = currentLine.split("\\t");
            red = Integer.parseInt(rgbValues[0]);
            green = Integer.parseInt(rgbValues[1]);
            blue = Integer.parseInt(rgbValues[2]);
            rgbPatches.add(new RgbColorValue(red, green, blue));
        }

        bufferedInputStream.close();
        assetDescriptor.close();

文件本身实际上只是一个RGB颜色值的Excel电子表格,正在读取它们之间的标签。选项卡组件似乎不是问题,但第一行是大量的文本。不是颜色空间,或者根本不是颜色空间。我不确定这里发生了什么。

文件示例:

RGB
0   0   0
17  17  17
34  34  34
51  51  51
68  68  68
85  85  85
102 102 102
119 119 119
136 136 136
153 153 153
170 170 170
187 187 187
204 204 204
221 221 221
238 238 238
255 255 255
255 0   0
0   255 0
0   0   255

以下是Logcat中的内容示例,即使文件中只有非常少的文本。

Logcat Window

1 个答案:

答案 0 :(得分:0)

基于上述更新的以下内容是解决问题的方法。注意使用openRawResourceFd调用创建assetDescriptor之后的行。

    AssetFileDescriptor assetDescriptor = resources.openRawResourceFd(com.grubulon.R.raw.testing_patches);
    assetDescriptor.createInputStream();
    BufferedReader bufferedInputStream = new BufferedReader(new FileReader(assetDescriptor.getFileDescriptor()));

    colorSpace = bufferedInputStream.readLine();

    while ((currentLine = bufferedInputStream.readLine()) != null) 
    {
        rgbValues = currentLine.split("\\t");
        red = Integer.parseInt(rgbValues[0]);
        green = Integer.parseInt(rgbValues[1]);
        blue = Integer.parseInt(rgbValues[2]);
        rgbPatches.add(new RgbColorValue(red, green, blue));
    }

    bufferedInputStream.close();
    assetDescriptor.close();