Java 尝试读取json资产时FileNotFoundException
我正在开发一个应用程序,需要在点击按钮时自动发送电子邮件。我目前的问题是,我需要读取一个json文件,当我将存储在资产中的json路径传递到一个新的Java 尝试读取json资产时FileNotFoundException,java,android,json,filenotfoundexception,Java,Android,Json,Filenotfoundexception,我正在开发一个应用程序,需要在点击按钮时自动发送电子邮件。我目前的问题是,我需要读取一个json文件,当我将存储在资产中的json路径传递到一个新的FileReader()中时,我会得到一个未找到的文件异常。下面是我如何获得路径的。(想知道Uri.parse().toString是否冗余): 以下是我将其传递到的方法: sClientSecrets = GoogleClientSecrets .load(jsonFactory, new FileReader(CLIENT_SECRE
FileReader()
中时,我会得到一个未找到的文件异常
。下面是我如何获得路径的。(想知道Uri.parse().toString
是否冗余):
以下是我将其传递到的方法:
sClientSecrets = GoogleClientSecrets
.load(jsonFactory, new FileReader(CLIENT_SECRET_PATH));
我试图访问的json文件位于android项目目录下的app root下的my apps asset文件夹中(/app/assets/)
我不确定我在这里做错了什么,但我确信这很简单。请帮我指出正确的方向。您不应该使用直接文件路径访问资产。 文件已打包,并且位置将在每个设备上更改。 您需要使用helper函数来获取资产路径
getAssets().open()
有关详细信息,请参阅。您不应使用直接文件路径访问资产。 文件已打包,并且位置将在每个设备上更改。 您需要使用helper函数来获取资产路径
getAssets().open()
有关更多信息,请参阅。您可以使用此函数从资产中获取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;
}
您可以使用此函数从资产中获取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;
}
将文件直接保存在assets目录中,而不是原始样本 然后文件路径将是这样的
private static final String CLIENT_SECRET_PATH =
Uri.parse("file:///android_asset/***.json").toString()
希望您的问题能得到解决。将您的文件直接保存在资产目录中,而不是原始样本 然后文件路径将是这样的
private static final String CLIENT_SECRET_PATH =
Uri.parse("file:///android_asset/***.json").toString()
希望您的问题能够得到解决。@Rohit我能够使用您提供的方法作为起点。唯一的问题是我使用的gmail api需要一个阅读器作为参数,而不是字符串。这就是我所做的。我不再得到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;
}
@Rohit i能够使用您提供的方法作为起点。唯一的问题是我使用的gmail api需要一个阅读器作为参数,而不是字符串。这就是我所做的。我不再得到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;
}
你确定你的**.json文件在资产目录中“raw”下的“sample”文件夹中吗?你确定你的**.json文件在资产目录中“raw”下的“sample”文件夹中吗?我可以使用你提供的方法来构建我需要的内容。非常感谢。请参阅我在下面发布的答案。我能够使用您提供的方法来构建我所需要的。非常感谢。见下面我贴的答案。