onCreate()方法中的FileNotFoundException

时间:2018-12-27 12:24:34

标签: java android filenotfoundexception jsonreader

在我的FileNotFoundException方法中尝试使用JSONReader将文件加载到InputStream时,我不断收到onCreate错误。

我已经在一个简单的Java程序中测试了此代码,它似乎可以正常工作,并且还可以读取JSON文件。但是,在Android Studio中,我一直收到FileNotFoundException

我错误地引用了文件的位置吗?

这是我的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);

    List<String> linksList = new ArrayList<>();

    try {
        JsonReader reader = null;
        reader = new JsonReader(new FileReader("/assets/test.json"));
        reader.beginArray();

        while (reader.hasNext()) {

            String value = reader.nextString();
            linksList.add(value);
        }

        reader.endArray();
        reader.close();
    } catch (FileNotFoundException fnfe) {

        fnfe.printStackTrace();

    } catch (IOException ioe) {

        ioe.printStackTrace();
    }
}

这是日志-

12-27 11:56:11.342 20703-20703/com.adam.jsonreader W/System.err: java.io.FileNotFoundException: /assets/test.json (No such file or directory)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:146)
    at java.io.FileInputStream.<init>(FileInputStream.java:99)
12-27 11:56:11.343 20703-20703/com.adam.jsonreader W/System.err:     at java.io.FileReader.<init>(FileReader.java:58)
        at com.adamkhora.jsonreader.HomeActivity.onCreate(HomeActivity.java:43)

这是我的项目结构:

project_structure

2 个答案:

答案 0 :(得分:1)

代替df1 <- structure(list(id = c("111.txt", "112.txt", "113.txt", "114.txt", "115.txt", "116.txt"), `1_1` = c(NA, NA, NA, NA, NA, NA), `1_2` = c(NA, NA, NA, NA, NA, NA), `1_3` = c(NA, NA, NA, NA, NA, NA), `1_4` = c(NA, NA, NA, NA, NA, NA), `1_5` = c(NA, NA, NA, NA, NA, NA), `1_6` = c(NA, NA, NA, NA, NA, NA), `1_7` = c(NA, NA, NA, NA, NA, NA), `1_8` = c(NA, NA, NA, NA, NA, NA), `1_9` = c(NA, NA, NA, NA, NA, NA), `1_10` = c(NA, NA, NA, NA, NA, NA), `1_freq` = c(NA, NA, NA, NA, NA, NA)), class = "data.frame", row.names = c(NA, -6L)) df2 <- structure(list(id = c("111.cats", "112.cats", "113.cats", "114.cats", "115.cats", "116.cats"), cats = c("1,7,1", "1,1,2|1,3,2", "1,10,1|1,6,2", "1,4,2", "1,5,1", "1,1,2|1,8,1")), class = "data.frame", row.names = c(NA, -6L))

使用

new FileReader("/assets/test.json")

您需要使用new BufferedReader(new InputStreamReader(getAssets().open("test.json"), StandardCharsets.UTF_8)); 方法在android中使用资产。

答案 1 :(得分:0)

只需在以下代码段中使用文件名即可

 try {
        InputStream is = context.getAssets().open("test.json");
        int size = is.available();
        byte[] buffer = new byte[size];
        is.read(buffer);
        is.close();
        json = new String(buffer, "UTF-8");

    } catch (IOException ex) {
        ex.printStackTrace();
        return null;
    }