Home > Mobile >  File or directory is not created in Android 10 and above device
File or directory is not created in Android 10 and above device

Time:10-07

I am developing a multifile converter app , in which user can select a excel file which can be converted into pdf , below method is used to create pdf file that is working fine in my phone which is android pie (android 9 ) , but when I run the app in android 10 real device also in emulator no directory is being created . please help me with the code and requesting runtime permission with dexter library

I added the line in manifest :-

  android:requestLegacyExternalStorage="true"

Permissions :--

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

My CreatePDF method:-

 void Convert_to_PDF(Uri path) throws IOException, DocumentException, URISyntaxException {

   File f = new File(Environment.getExternalStorageDirectory()   "/MultiFileCon");



    if (!f.exists()) if ( !f.mkdir()) return;




    SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH.mm.ss");
    Date date = new Date();
    // System.out.println(formatter.format(date));
    Log.d("DATE", formatter.format(date)   ".pdf");

    File pdffilex = new File(f.getAbsolutePath(), formatter.format(date)   ".pdf");


    Log.d("ABC", "Convert_to_PDF: " uriforExcel.getPath());


    if (android.os.Build.VERSION.SDK_INT > Build.VERSION_CODES.P) {
        Toast.makeText(this, "android version is " android.os.Build.VERSION.SDK_INT, Toast.LENGTH_LONG).show();
        Log.d("VERSION NAME", "Convert_to_PDF: " android.os.Build.VERSION.SDK_INT);
        File file = new File(path.getPath());//create path from uri
        final String[] split = file.getPath().split(":");//split the path.
       filePath = split[1];
        input_document = new FileInputStream(filePath);
    }
    else {
        input_document = new FileInputStream(new File(PathUtil.getPath(this,path)));
    }




    // Read workbook into HSSFWorkbook
    HSSFWorkbook my_xls_workbook = new HSSFWorkbook(input_document);




    // Read worksheet into HSSFSheet
    HSSFSheet my_worksheet = my_xls_workbook.getSheetAt(0);
    // To iterate over the rows
    Iterator<Row> rowIterator = my_worksheet.iterator();
    //We will create output PDF document objects at this point
    Document iText_xls_2_pdf = new Document();
    PdfWriter.getInstance(iText_xls_2_pdf, new FileOutputStream(pdffilex));
    iText_xls_2_pdf.open();
    //we have two columns in the Excel sheet, so we create a PDF table with two columns
    //Note: There are ways to make this dynamic in nature, if you want to.
    PdfPTable my_table = new PdfPTable(7);
    //We will use the object below to dynamically add new data to the table
    PdfPCell table_cell;
    //Loop through rows.
    while(rowIterator.hasNext()) {
        Row row = rowIterator.next();
        Iterator<Cell> cellIterator = row.cellIterator();
        while(cellIterator.hasNext()) {
            Cell cell = cellIterator.next(); //Fetch CELL
            switch(cell.getCellType()) { //Identify CELL type
                //you need to add more code here based on
                //your requirement / transformations
                case Cell.CELL_TYPE_STRING:
                    //Push the data from Excel to PDF Cell
                    table_cell=new PdfPCell(new Phrase(cell.getStringCellValue()));
                    Log.d("DOL", cell.getStringCellValue());






                    //feel free to move the code below to suit to your needs
                    my_table.addCell(table_cell);
                    break;
            }
            //next line
        }

        // Log.d("DOL", "Convert_to_PDF: " datatobe);

    }
    //Finally add the table to PDF document
    iText_xls_2_pdf.add(my_table);
    iText_xls_2_pdf.close();
    //we created our pdf file..
    input_document.close(); //close xls
}

CodePudding user response:

SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");

':'

is a forbidden character in a file system path.

Try:.

 "dd-MM-yyyy HH.mm.ss"

CodePudding user response:

The Environment.getExternalStorageDirectory() method does not work on Android 11 or above version devices for security reasons.

You can easily store your file in a public directory. Here is an example of how you access a public directory in Android Studio.

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);

so you can try this code in your project.

File baseFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "MultiFileCon");

if (!baseFile.exists()) {
    baseFile.mkdirs();
}

File pdfFile = new File(baseFile, "PDF_"   Calendar.getInstance().getTimeInMillis()   ".pdf");

Log.e(TAG, "onCreate: pdfFile path is:  "   pdfFile.getAbsolutePath());
  • here you got path be like: /storage/emulated/0/Download/MultiFileCon/PDF_1665148985587.pdf
  • Related