FileNotFoundException в методе onCreate()
Я продолжаю получать 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)
Вот моя структура проекта:
2 ответа
Решение
Вместо new FileReader("/assets/test.json")
,
использование
new BufferedReader(new InputStreamReader(getAssets().open("test.json"), StandardCharsets.UTF_8));
Вам нужно использовать getAssets()
Способ использовать активы в Android.
Просто используйте приведенный ниже фрагмент, указав имя файла
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;
}