Intereting Posts

Android: open failed: ENOENT (Нет такого файла или каталога)

Привет, я пытаюсь прочитать excel из активов и хотел преобразовать его в JSON, Но я получаю сообщение об ошибке: open failed: ENOENT (Нет такого файла или каталога) , искал много вопросов SO, но не смог найти решение Ниже мой код

public void readXlsFileAndConvertToJsonObject() { JSONArray jsonArray = new JSONArray(); JSONArray mainJsonArray = new JSONArray(); try { File file = new File("file:///android_asset/filters.xls"); FileInputStream fis = new FileInputStream(file); //final FileInputStream file = new FileInputStream(new File("filters.xls")); int count = 0; // Get the workbook instance for XLS file HSSFWorkbook workbook = new HSSFWorkbook(fis); // Get first sheet from the workbook HSSFSheet sheet = workbook.getSheetAt(0); // Iterate through each rows from first sheet Iterator < Row > rowIterator = sheet.iterator(); while (rowIterator.hasNext()) { Row row = rowIterator.next(); //LOGGER.info("count is " + count); if (count == 0 || count == 1) {} else { try { JSONObject jsonMaterialObject = new JSONObject(); // Name jsonMaterialObject.put("name", row.getCell(0) .toString()); // thick ness jsonMaterialObject.put("thickness", row.getCell(4) .toString()); // rating_1 jsonMaterialObject.put("rating_1", row.getCell(5) .toString()); // rating_2 jsonMaterialObject.put("rating_2", row.getCell(6) .toString()); jsonMaterialObject.put("low_frequency_rank", row .getCell(7).toString()); jsonMaterialObject.put("medium_frequency_rank", row .getCell(8).toString()); jsonMaterialObject.put("high_frequency_rank", row .getCell(9).toString()); // Add file size final File dir = new File("file:///android_asset/filename"); final File[] ListFiles = dir.listFiles(); boolean found = false; if (ListFiles.length == 0) {} else { for (File aFile: ListFiles) { System.out.println("Afile Name " + aFile.getName()); System.out.println("A file from json Name " + row.getCell(0).toString()); if (aFile.getName().equalsIgnoreCase( row.getCell(0).toString() + ".pdf")) { jsonMaterialObject.put("fileSize", truncateDecimal(aFile.length() / 1024, 2)); found = true; } if (found) { break; } } jsonMaterialObject.put("pdfFileName", row .getCell(0).toString() + ".pdf"); } jsonArray.put(jsonMaterialObject); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } count++; } ((Closeable) file).close(); } catch (FileNotFoundException e) {} catch (IOException e) {} createMaterialJson(jsonArray.toString(), "finalfile.json"); } 

Я упомянул разрешения, как показано ниже

 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

Ниже мой след

 11-25 12:32:35.535: I/System.out(20019): Exception accured in readXlsFileAndConvertToJsonObject /file:/android_asset/filters.xls: open failed: ENOENT (No such file or directory) 

Эта проблема потеряла мои часы: P

Тщательно проверьте свои имена файлов, выполнив ведение журнала.

Эта проблема связана с некоторыми именами файлов с цифрами.

Я решил это, изменив имя файла.

Используйте getAssets().open("filter.xls") (он возвращает InputStream). Вызовите это в контексте или действии. Только в некоторых случаях это работало для меня.