2014-11-25 175 views
7

嗨,我想从资产中读取excel,并希望将其转换为JSON,但我得到的错误:打开失败:ENOENT(没有这样的文件或目录),搜查了许多SO问题,但未能找到解决 下面是我的代码Android:打开失败:ENOENT(没有这样的文件或目录)

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) 

回答

7

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

登录彻底检查您的文件名。

此问题附带一些带数字的文件名。

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

+0

你是如何更改文件名的?请参阅此问题:http://stackoverflow.com/questions/30882833/file-not-found-exception-when-trying-to-upload-file-to-xampp-server-from-android/30883016?noredirect=1 #comment49807367_30883016。请帮我解决我的问题。提前致谢。 – Keshav1234 2015-06-17 09:36:55

+0

有数字的文件名有什么问题,是否有任何出路而不必更改文件名? – 2015-07-28 08:53:37

0

使用getAssets().open("filter.xls")(它返回一个InputStream)。在上下文或活动中调用它。只有这在某些情况下适用于我。

相关问题