找不到Java文件

时间:2012-06-24 06:06:51

标签: java android filenotfoundexception fileinputstream

我从以下方法调用文件glassShader.vert,它给了我FileNotFoundException错误

复杂的问题是,包含此方法的类GLGridRenderer位于目录GridLogin中,该目录又位于包com.jasfiddle.AmazingInterface

因此,为了解决该目录,它将是com.jasfiddle.AmazingInterface.GridLogin

但我不知道如何调用GridLogin中的shader.vert

  public static String readShaderFile(String filepath) throws IOException {
    FileInputStream stream = new FileInputStream(new File(filepath));
    try{
        FileChannel fc = stream.getChannel();
        MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
        return Charset.defaultCharset().decode(bb).toString();
    }
    finally{
        stream.close();
    }
}

2 个答案:

答案 0 :(得分:0)

您要阅读的文件不应放在包中。它们应该被打包为资源或资产。例如,使用数据文件,将其放在res/raw文件夹中,并为其提供合法的资源名称。如果您有Context(例如Activity班级或View班级),则可以打开输入流。

InputStream stream = context.getResources().openRawResource(R.raw.filepath);

(如果您将文件命名为res/raw/filepath.dat,则可能是这样。您可能想要一个更有意义的名称。如果您希望名称是变量,那么您可以使用以下命令获取资源ID:

int resId = context.getResources.getIdentifier(filepath, "raw", context.getPackageName());

答案 1 :(得分:0)

除了raw之外,您还可以使用资产文件夹,请参阅link ....

try {
                // get input stream for text
                InputStream is = getAssets().open("text.txt");
                // check size
                int size = is.available();
                // create buffer for IO
                byte[] buffer = new byte[size];
                // get data to buffer
                is.read(buffer);
                // close stream
                is.close();
                            }
            catch (IOException ex) {
                return;
            }