文件存在时的 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();
}

抱歉,格式搞砸了。我也尝试在路径中使用 \ 而不是 / ,但它不起作用。任何帮助将不胜感激 - 非常感谢!

解决方法

您可以在测试时使用此代码,但很明显,您的 Android 手机上没有 C:\Users\andno,而且永远不会有。

你找错了树。您根本不想读取文件。

您想从 java(或者更确切地说,android)加载类文件(或 android 中类文件的任何传递)的同一位置读取资源。这可能来自 jar 或 apk 或诸如此类的东西。

UiMain.class.getResource("test.json")

UiMain.class.getResourceAsStream("test.json")

将从 test.json 所在的同一个地方(即在同一个包中,我假设这是类 UiMain.class。第一个为一个 URL,您通常可以将其传递给图像等的构造函数,第二个作为流,您需要安全地关闭它(如果 android 已经开始添加 20 年,请尝试/最终或尝试使用资源旧的 Java 功能),您可以使用各种 API 将其转换为字符串。可能 JSON API 本身可以只提供输入流。