Orlmite配置文件writeConfigFile出现Could not find raw directory which is typically in the res directory
2016-09-05 18:28
411 查看
刚开始出现这个错误有点懵逼,因为代码没改过,ormlite的配置也写了好几个版本了,都没出问题,而且确保项目里的raw文件夹是有的,所以一直不知道问题出在哪里
so上网查了下,so里面有几个答案,有的是让new file一个具体路径的,有一个答案是让在项目外面新建一个res文件夹,然后在res文件夹里在新建一个raw的。这两种方案我都试用成功了,但是很奇怪为什么会出现这种bug,于是接下来就是分析原因了
分析源码过程如下
简单明了,寻找raw文件夹,找到了读取配置文件,没找到报异常,就是我们那个咯,那来看看是怎么找的,接下去分析findRawDir这个函数
/**
* Look for the resource-directory in the current directory or the directories above. Then look for the
* raw-directory underneath the resource-directory.
*/
protected static File findRawDir(File dir) {
for (int i = 0; dir != null && i < 20; i++) {
File rawDir = findResRawDir(dir);
if (rawDir != null) {
return rawDir;
}
dir = dir.getParentFile();
}
return null;
}
这个函数也不难嘛,往上遍历20层文件目录,看能不能找到raw文件夹,好,继续看看是怎么找raw文件夹的
看这整个过程简直无懈可击啊,那问题出在哪儿呢?
可能你已经猜到了,问题出在寻找文件夹的初始文件路径那里,
知道原因,那解决方式就很多了,可以选取自己最适合的方式去解决这个小bug
so上网查了下,so里面有几个答案,有的是让new file一个具体路径的,有一个答案是让在项目外面新建一个res文件夹,然后在res文件夹里在新建一个raw的。这两种方案我都试用成功了,但是很奇怪为什么会出现这种bug,于是接下来就是分析原因了
分析源码过程如下
/** * Writes a configuration fileName in the raw directory with the configuration for classes. */ public static void writeConfigFile(String fileName, Class<?>[] classes) throws SQLException, IOException { File rawDir = findRawDir(new File(".")); if (rawDir == null) { System.err.println("Could not find " + RAW_DIR_NAME + " directory which is typically in the " + RESOURCE_DIR_NAME + " directory"); } else { File configFile = new File(rawDir, fileName); writeConfigFile(configFile, classes); } }
简单明了,寻找raw文件夹,找到了读取配置文件,没找到报异常,就是我们那个咯,那来看看是怎么找的,接下去分析findRawDir这个函数
/**
* Look for the resource-directory in the current directory or the directories above. Then look for the
* raw-directory underneath the resource-directory.
*/
protected static File findRawDir(File dir) {
for (int i = 0; dir != null && i < 20; i++) {
File rawDir = findResRawDir(dir);
if (rawDir != null) {
return rawDir;
}
dir = dir.getParentFile();
}
return null;
}
这个函数也不难嘛,往上遍历20层文件目录,看能不能找到raw文件夹,好,继续看看是怎么找raw文件夹的
/** * Look for the resource directory with raw beneath it. */ private static File findResRawDir(File dir) { for (File file : dir.listFiles()) { if (file.getName().equals(RESOURCE_DIR_NAME) && file.isDirectory()) { File[] rawFiles = file.listFiles(new FileFilter() { @Override public boolean accept(File file) { return file.getName().equals(RAW_DIR_NAME) && file.isDirectory(); } }); if (rawFiles.length == 1) { return rawFiles[0]; } } } return null; }恩,简单明了,在当前文件目录下遍历找到res文件夹,找不到返回空,找到res之后继续找raw文件夹
看这整个过程简直无懈可击啊,那问题出在哪儿呢?
可能你已经猜到了,问题出在寻找文件夹的初始文件路径那里,
new File(".")这个会定位到工程总文件夹的一级子目录,也就是你的.gradle目录,从这个目录往上找,如果找不到res文件夹,当然就更找不到raw文件夹了,那异常就这样发生了
知道原因,那解决方式就很多了,可以选取自己最适合的方式去解决这个小bug
相关文章推荐
- SqlServer2005 恢复数据库时出现Exclusive access could not be obtained because the database is in use 的解决方法
- bundle install时候出现"Could not find modernizr-2.6.2 in any of the sources"
- FAQ(38):nested exception is org.apache.ibatis.builder.IncompleteElementException: Could not find res
- 关于打开Eclipse时出现eclipse failed to create the java virtual machine与locking is not possible in the directory问题的解决
- SqlServer2005 恢复数据库时出现Exclusive access could not be obtained because the database is in use 的解决方法
- SqlServer2005 恢复数据库时出现Exclusive access could not be obtained because the database is in use 的解决方法
- 打开CCS5 出现locking is not possible in the directory
- 使用布局的Onclick属性运行出现“Could not find a method~~(View) in the activity class com.~~”
- 使用nhibernate出现Could not find the dialect in the configuration
- 'ddlCities' has a SelectedValue which is invalid because it does not exist in the list of items
- 'ddlXXX' has a SelectedIndex which is invalid because it does not exist in the list of items
- DirectoryNotFoundException: Could not find a part of the path "……"
- Could not find make command: mingw32-make.exe in the build environment
- Exclusive access could not be obtained because the database is in use
- nested exception is org.hibernate.PropertyNotFoundException: Could not find a getter for eNum in class
- 用sudo时出现svn is not in the sudoers file.
- qt4.7中Could not find make command: mingw32-make.exe in the build environment的解决办法
- [Solved]: System.Data.SqlClient.SqlError: Exclusive access could not be obtained because the database is in use.
- 在安装 Windows 过程中出现“Ntkrnlmp.exe Could Not Be Loaded. The Error Code Is 7”(无法加载 Ntkrnlmp.exe。错误代码是 7)错误消息
- What is the "Could not find resource assembly" error message?