如何访问Android中驻留在SDCard内的java文件

时间:2017-05-30 06:40:24

标签: java android

我正在尝试使用URLClassLoader类将Java文件加载到我的android项目中。

但是当我运行以下代码时,我得到了ClassNotFoundError

package com.xyz.abc;
public class ConstantClassReader
{
    public void readFile() throws MalformedURLException
    {
        String url = "file://"+Environment.getExternalStorageDirectory().getPath()+"/StringConstants.class";
        URLClassLoader urlClassLoader = URLClassLoader.newInstance(new URL[]{new URL(url)});
        Class simpleClass = null;
        try {
            simpleClass = urlClassLoader.loadClass("com.xyz.abc.StringConstants");
            Constructor simpleConstructor = simpleClass.getConstructor();
            Object simpleClassObj = simpleConstructor.newInstance();
            Method method = simpleClass.getMethod("myMethod");
            method.invoke(simpleClassObj);
        } catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InstantiationException | InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}

以下Java文件位于我的SD卡中:

package com.xyz.abc;
public class StringConstants{
    public void myMethod(){
        System.out.println("myMethod Loaded");
    }
}

2 个答案:

答案 0 :(得分:2)

类加载器加载

将Java源文件放在某处不会。

你必须编译该文件;并且也许那么你很幸运。但如果Android JVM允许您从任意位置加载类,我会感到非常惊讶。这尖叫声:"安全问题"到处都是。

根据您的要求,我会建议一个不同的解决方案,这是在普通Java属性之上。含义:似乎你只想提供一些配置"动态信息到您的Java应用程序。然后让该应用程序读取包含键/值对的属性文件。这(几乎)像往常一样;和导致需要在任意位置加载类文件。

答案 1 :(得分:1)

http://www.beanshell.org/

你可以嵌入beanshell,加载java文件,实例并执行任何操作。

从sd

中访问任何其他普通文件的java文件

How can I read a text file from the SD card in Android?