Android:打开失败:ENOENT(没有这样的文件或目录)

7

你好,我正在尝试从assets读取Excel并将其转换为JSON,但是我遇到了错误:打开失败:ENOENT(没有这样的文件或目录),在Stack Overflow上搜索了很多问题,但是找不到解决方案。以下是我的代码:

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)
2个回答

7

这个问题浪费了我好几个小时的时间 :P

通过日志仔细检查你的文件名。

这个问题是由于一些带数字的文件名引起的。

我通过更改文件名来解决了这个问题。


你是如何更改文件名的?请参考这个问题:https://dev59.com/EIzda4cB1Zd3GeqPhQ7o#30883016?noredirect=1#comment49807367_30883016。请帮我解决我的问题。提前致谢。 - keshav kowshik
文件名中带有数字有什么问题,是否有办法不改变文件名的情况下解决这个问题? - A_Matar

0

使用 getAssets().open("filter.xls") (它返回一个 InputStream)。在上下文或活动中调用此方法。在某些情况下,只有这种方法对我有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接