2014-09-23 63 views
2

我最近刚开始使用Android Studio进行编程学习。当我使用getResourceAsStream读取Android Studio中的属性文件时,获取“null”

我今天遇到了一个问题,当我使用getResourceAsStream从JUNIT TEST中读取一个属性文件时,这个问题一直保持“null”状态。

当我使用Eclipse时,我曾经在“src”目录下找到.properties文件。但在Android Studio中,它不起作用。

下面是代码名为Bean工厂类的那部分,:

private static Properties properties; 

static { 
    properties = new Properties(); 
    InputStream is = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties"); 
    try { 
     properties.load(is); 
    }catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

在Eclipse中,我所在src下的道具文件,它工作得很好。

但在Android Studio中,我尝试将“bean.properties”文件放在几个不同的目录中。比如/ src或/ src/main/java,没有任何结果。

我应该在哪里放置prop文件?我应该为此做什么配置?

回答

0

有两个问题。一般而言,资源以编译后的.class文件存储在jar文件中。 getResourcegetResourceAsStream是一类的方法。在这个类的jar中搜索资源(一般来说)。所以继承getClass().getResource("...")可能是危险的。

第二个更严重的错误是,除非使用“/ ...”,否则路径是相对于到类的包(目录)。

另一种方法是使用ResourceBundle而不是Properties。 ResourceBundle有一个用于* .properties的PropertiesResourceBundle。

ResourceBundle properties = ResourceBundle.getBundle("bean"); 
-1

试试这个:
1.put自己bean.properties在app文件/ src目录/主/资产
2.change你的代码:

private static Properties prop; 

static { 
    prop = new Properties(); 
    try { 
     InputStream is = IWorkApplication.getInstance().getResources().getAssets().open("bean.properties", Context.MODE_PRIVATE); 
     prop.load(is); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

PS。 IWorkApplication.getInstance()是在我自己的应用程序类中定义的。
希望有用

+0

这会起作用,但在大多数情况下,您并不是真的希望这些文件被包含在应用程序构建中,因为它们是单元测试的虚拟数据。 – Oyvind 2015-02-10 23:00:44

1

将资源放入资产在某些情况下是不可接受的。我通过将所需的资源打包到特殊的jar文件中,并将此jar放入libs目录中来解决此问题。因此,您仍然可以通过标准的Java技术访问它们。

+0

任何想法,主要Android模块所依赖的java库模块中的资源需要做什么? – 2016-10-01 19:21:48