尝试读取json资产时出现FileNotFoundException

时间:2017-07-30 06:31:26

标签: java android json filenotfoundexception

我正在开发一款需要在点击按钮时发送自动电子邮件的应用。我目前遇到的问题是我需要读取一个json文件,当我将资产中存储的json的路径传递给新的FileReader()时,我得到一个未找到的文件Exception。这是我如何获得这条道路。 (想知道Uri.parse().toString是否多余):

private static final String CLIENT_SECRET_PATH = 
        Uri.parse("file:///android_asset/raw/sample/***.json").toString()

这是我传递给它的方法:

sClientSecrets = GoogleClientSecrets
      .load(jsonFactory, new FileReader(CLIENT_SECRET_PATH));

我正在尝试访问的json文件位于android项目目录(/ app / assets /)中app根下的app资源文件夹中

我不确定我在这里做错了什么,但我确定这很简单。请帮助我指出正确的方向。

4 个答案:

答案 0 :(得分:1)

您不应使用直接文件路径访问资产。 文件已打包,每个设备上的位置都会更改。 您需要使用辅助函数来获取资产路径

getAssets().open()

有关详细信息,请参阅this post

答案 1 :(得分:1)

您可以使用此函数从资源中获取JSON字符串,并将该字符串传递给FileReader。

public String loadJSONFromAsset() {
    String json = null;
    try {
        InputStream is = getActivity().getAssets().open("yourfilename.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;
}
return json;
}

答案 2 :(得分:0)

将文件直接保存在资产目录中,而不是raw-sample。

然后文件路径就像这样

def getSubsetSum(arr1, arr2, target):
    diffs = set()
    for a in arr1:
        diffs.add(target - a)
    for b in arr2:
        if b in diffs:
            return (target -b, b)
    return None

希望你的问题能够得到解决..

答案 3 :(得分:0)

@Rohit我能够使用您提供的方法作为起点。唯一的问题是我使用的gmail api需要一个Reader作为参数,而不是一个字符串。这就是我所做的。我不再获得filenotfoundexception。非常感谢你。

public InputStreamReader getJsonStreamReader(String file){
    InputStreamReader reader = null;
    try {
        InputStream in = getAssets().open(file);
        reader = new InputStreamReader(in);
    }catch(IOException ioe){
        Log.e("launch", "error : " + ioe);
        }
    return reader;
}