首页 > 解决方案 > 文件存在时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();
}

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

标签: javaandroidnosuchfileexception

解决方案


您在测试时也许可以让此代码工作,但显然,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 本身可以只提供一个输入流。


推荐阅读