我的Android项目中只有一个Java模块。在那个项目中,我希望有一个单元测试,它从存储在resources文件夹中的本地json文件中读取内容。 Android Studio更改了资源文件夹的图标,因此我认为它将其识别为资源文件夹。
我如何阅读:
String json = Files.lines(Paths.get("file.json"))
.parallel()
.collect(Collectors.joining());
文件夹结构:
+project
+app (android)
+module (java only)
+src
+main
+java
+package
-the java file
+resources
-file.json
我的问题是如何阅读文件?
在下方更新
URL resource1 = getClass().getResource("file.json");
URL resource2 = getClass().getClassLoader().getResource("file.json");
URL resource3 = Thread.currentThread().getContextClassLoader().getResource("file.json");
URL resource4 = ClassLoader.getSystemClassLoader().getResource("file.json");
所有这些都是空的。
我已经将json文件复制到resources/same.package.structure
,但没有成功。
答案 0 :(得分:1)
您应该使用Paths.get(URI)
代替,例如:
ClassLoader loader = ClassLoader.getSystemClassLoader();
String json = Files.lines(Paths.get(loader.getResource("file.json").toURI()))
.parallel()
.collect(Collectors.joining());
这是因为您在Android平台上运行测试,并且在一个jar中BufferedReader.lines
代替,例如:
ClassLoader loader = activity.getClassLoader();
BufferedReader in = new BufferedReader(new InputStreamReader(
loader.getResourceAsStream("file.json"),"UTF-8"
));
String json = in.lines()
.parallel()
.collect(Collectors.joining());
答案 1 :(得分:1)
不要用ClassLoaders完成所有这些复杂的事情。您可以从/ test / *类访问test / resources目录。
<强> UPD 强> 这是使用SimpleXML使用其路径反序列化文件的方法。所以这里的源方法参数是你的资源文件路径
答案 2 :(得分:0)
显然这是一个错误,现在应该修复: https://issuetracker.google.com/issues/63612779
谢谢大家的帮助