您的位置:首页 > 其它

Orlmite配置文件writeConfigFile出现Could not find raw directory which is typically in the res directory

2016-09-05 18:28 357 查看
刚开始出现这个错误有点懵逼,因为代码没改过,ormlite的配置也写了好几个版本了,都没出问题,而且确保项目里的raw文件夹是有的,所以一直不知道问题出在哪里

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐