Hi i am trying to read excel from assets and wanted to convert it into JSON, But i am getting the error: open failed:ENOENT(No such file or directory), searched many SO questions but could not find the solution Below is my code
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");
}
I mentioned the permissions as below
<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"/>
Below is my Trace
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)
The ENOENT (No such file or directory) error may occur in application, If the application do not have storage permission. We suggest you to ensure whether the application has storage permission to read and write file in storage location. We have modified sample to provide storage permission at run time.
It's an abbreviation of Error NO ENTry (or Error NO ENTity), and can actually be used for more than files/directories.
This issue wasted my hours of time :P
Thoroughly check your file names by Logging.
This issue is comes with some file names with digits.
I solved this by changing the file name.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With