java - 文件存在时Java NoSuchFileException
问题描述
我正在尝试将 json 文件作为 android 开发项目的一部分进行解析。这是不断弹出的错误消息:
W/System.err: java.nio.file.NoSuchFileException: C:/Users/andno/Desktop/AndroidDev2ClimateApp/app/src/main/java/com/example/androiddev2climateapp/ui/home/test.json
但是,在 android studios 中,错误中的路径作为链接提供,我可以单击该链接,引导我进入写入文件-因此,我认为路径没有错. 这是我的代码:
String first = "C:/Users/andno/Desktop/AndroidDev2ClimateApp/app/src/main/java/com/example/androiddev2climateapp/ui/home/test.json";
try {
String fileContents = new String((Files.readAllBytes(Paths.get(first))));
JSONObject json = new JSONObject(fileContents);
JSONArray widgets = new JSONArray("WidgetArray");
for(int i = 0; i < widgets.length(); i++){
int id = widgets.getJSONObject(i).getInt("id");
System.out.println(id);
}
} catch(IOException | JSONException e){
e.printStackTrace();
}
抱歉,格式乱了。我也尝试在路径中使用 \ 而不是 /,但它不起作用。任何帮助将不胜感激 - 非常感谢!
解决方案
您在测试时也许可以让此代码工作,但显然,C:\Users\andno
您的 android 手机上没有,而且永远不会有。
你找错树了。您根本不想读取文件。
您想从 java(或者,更确切地说,android)正在加载类文件(或 android 中类文件的任何传递)的同一位置读取资源。这可能来自 jar 或 apk 或诸如此类的东西。
UiMain.class.getResource("test.json")
或者
UiMain.class.getResourceAsStream("test.json")
将为您提供一个test.json
从所在位置命名的资源UiMain.class
(即在同一个包中,我假设这是 class com.example.android.androiddev2climateapp.home.ui.UiMain
。第一个作为 URL,您通常可以将其传递给图像等的构造函数,并且第二个作为流,您需要安全地关闭它(如果 android 已经开始添加这个 20 年的 Java 功能,请尝试/最终或 try-with-resources),您可以使用各种 API 将其转换为字符串。可能 JSON API 本身可以只提供一个输入流。
推荐阅读
- javascript - (REACT) 优化 API 调用链导致组件不渲染
- javascript - Jquery Datatable 分页按钮样式修复
- aws-amplify - AWS Amplify 创建多个具有重复信息的 DynamoDB 表?
- flutter - 如何从映射转换字符串值
> 键入 Double?扑 - python - 在 Mac OS Catalina 上卸载所有 `pip` 包
- django - django 如何在模板中循环查看和打印
- automation - 如何使用 appium 找到当前的 apk 版本?
- java - Apache Crunch 可以用来创建类似 Graph 的数据结构吗?
- java - 可滚动的 TabWidget 或 TabLayout
- javascript - 有 2 个 Spotify api 调用,如何将它们放入 1 个 Promise.all?