【问题标题】:Java IOExeption reading file androidJava IOException读取文件android
【发布时间】:2021-03-04 18:25:06
【问题描述】:

我正在尝试让 Opengl es 应用程序正常工作,我目前正在处理着色器。 为此,我需要打开位于 src/shaders/ 中的两个文本文件 这是我的代码:

private static int LoadShader(String filepath, int type){
      File file = new File(filepath);
      StringBuilder codebuilder = new StringBuilder();
      try{
        BufferedReader reader = new BufferedReader(new FileReader(file));
        String line;
        while((line = reader.readLine())!=null){
          codebuilder.append(line);
          codebuilder.append("\n");
        }
        reader.close();
      }catch(IOException e){
        System.err.println("could not read" + filepath);
        e.printStackTrace();
        System.exit(-1);
      }
//And some other code
}

输入是String a = "src/shaders/vertexshader.txt", int GLES20.GL_VERTEX_SHADER 和String b = "src/shaders/fragmentshader.txt", int GLES20.GL_FRAGMENT_SHADER。

应用程序构建正确,但由于System.exit(-1); 而立即崩溃(当我删除它时,它不再崩溃)。

文件路径不是问题,我检查了多次。 更糟糕的是,我无法访问任何形式的后门或与我的程序进行日志通信,因为我可以使用唯一的编译器(java N-IDE for android)。 请帮忙,这个项目快把我逼疯了。

//编辑

我是 java 和一般编程的新手,而且我更多地来自 c++ 背景,所以 try catch 对我来说相对较新。所以我不完全理解异常处理,这是从opengl的教程中复制的。

System.err.println("could not read" + filepath); 还有 e.printStackTrace(); 实际上对我不起作用,我只是懒得删除它们。

这也是所有这些的实现:

//Constructor of abstract class
//Loadshader is in the same class

public ShaderBase(String vertexfile, String fragmentfile){
      vertexshaderID = LoadShader(vertexfile,GLES20.GL_VERTEX_SHADER);
      fragmentshaderID = LoadShader(fragmentfile,GLES20.GL_FRAGMENT_SHADER);

//And other code
}
//Implementation of abstract class

    private static final String VERT_FILE = "src/shaders/vertexshader.txt";
    private static final String FRAG_FILE = "src/shaders/fragmentshader.txt";
    
    public StaticShader(){
      super(VERT_FILE,FRAG_FILE);
    }
//And other code
}

另外,这是我的文件系统: My file system

代码主要是opengl(https://youtu.be/VS8wlS9hF8E)、opengl es(https://youtu.be/QcmJQ2_kpks)的教程和我在网上找到的一些工作示例(https://www.learnopengles.com/android-lesson-one-getting-started/)的不匹配 所以如果你有一些好的教程建议,请告诉我。

【问题讨论】:

  • 您正在打印堆栈跟踪 - 那是什么意思...或者这就是您说“无日志通信”时所指的...
  • 请将输入字符串放入您的代码中。目前我们甚至不知道 filePath 的值。首先展示如何调用 LoadShader 函数。
  • The file path isn't the problem, I checked it multiple times. src 目录是您电脑上项目的子目录。它不存在于 Android 设备上。此外,您应该使用绝对部分。不是亲戚。

标签: java android opengl-es filereader ioexception


【解决方案1】:

我找到了答案:编译前和编译后的文件系统不一样。通过MainActivity.getAssets().open("something.txt");,我能够打开位于 apps/apps/src/main/assets 文件夹中的文件。

【讨论】:

    猜你喜欢
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 2012-10-21
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多