【问题标题】:Android - reading txt files from external jarAndroid - 从外部 jar 读取 txt 文件
【发布时间】:2013-11-08 04:31:16
【问题描述】:

我有一个用核心 jdk 编译的 jar。

它包含一个读取 txt 文件的 java 类。 它有一个测试证明这个类可以正常工作。

如果我在我的 android 项目中包含这个 jar,然后调用读取 txt 文件的 java 类。报告失败:java.io.FileNotFoundException 并在我要加载的 txt 文件的路径中添加“/”。

Android 的安全模型是否会阻止读取 txt 文件?

我的项目结构:

Android 模块:

src/Loader.java [调用 GetName.java]

Java 模块:

test/TestGetName.java [调用 GetName.java]

src/GetName.java

资源/names.txt

总结:

TestGetName.java 有效

Loader.java 失败。在 GetName 中抛出 FileNotFoundException

【问题讨论】:

    标签: java android


    【解决方案1】:

    最后想通了。我需要一个条件来查看我是在本地加载文件还是作为资源加载文件。可能有一种更简洁的方法可以在不使用条件的情况下做到这一点。

        String source = "resources/inputfile.txt";
        BufferedReader fin;
    
        InputStream inputStream = getClass().getResourceAsStream(source.substring(source.lastIndexOf("/")));
        if (inputStream != null) {
            fin = new BufferedReader(new InputStreamReader(inputStream));
        } else {
            fin = new BufferedReader(new FileReader(new File(source)));
        }
    

    感谢作为资源用户77777777阅读的提示

    【讨论】:

      【解决方案2】:

      Android 似乎没有阻止它访问文件,因为异常是 FileNotFoundException。您应该检查详细消息以确认这一点。捕获异常并打印详细消息。这会给你一个更好的主意。还要重新检查文件路径。

      编辑: 尝试仅传递资源名称。

      getClassLoader().getResource("names.txt");
      

      【讨论】:

      • 详细消息指出:/resources/names.txt(没有这样的文件或目录),但这不是我提供的路径。我提供:resources/names.txt
      • 资源文件夹在哪里?在哪个目录?它假设资源文件夹位于根目录中。
      • 资源文件夹位于模块的根目录中。我不知道为什么它试图从文件系统根目录加载它
      • 尝试传递 ./resources/names.txt(相对于当前目录)
      • 我尝试过使用资源。问题是它将文件路径从“resources/names.txt”编辑为“/resources/names.txt”,我不明白为什么这样做
      【解决方案3】:

      我不知道为什么,但接受的答案对我不起作用。

      构建系统:Gradle

      工作环境:Android Studio

      我还包含了来自外部 jar 的资源。但为了使用它们,我还必须包含完整路径。

      this.getClass().getResourceAsStream("/template/login.xml")
      

      希望这对某人有所帮助,并防止他花费 3 个小时将头撞在墙上寻找答案。

      【讨论】:

        猜你喜欢
        • 2014-06-05
        • 2012-10-28
        • 2015-12-23
        • 2015-11-30
        • 2019-05-14
        • 2011-04-09
        • 1970-01-01
        • 2012-12-25
        • 2015-08-26
        相关资源
        最近更新 更多