2016-07-04 5 views
2

Jexcel API를 사용하여 Excel 파일을 만들고 휴대 전화에서 내 응용 프로그램을 사용하여 파일에 쓰려고합니다. 앱을 실행하면 FileNotFoundException이 표시됩니다. 나도 같은 다른 질문에 대한 답변에 따라 텍스트 파일을 만들려고 했는데도 같은 오류가 발생합니다. 매니페스트에 적절한 권한을 부여했지만 여전히 문제를 정확히 지적하지는 못합니다. 도와주세요.Android에서 파일을 만들려고 할 때 FileNotFoundException이 발생합니다.

여기 내 코드 실행에

public WritableWorkbook createWorkbook(String fileName){ 

    //Saving file in external storage 
     File sdCard = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); 
     File directory = new File(sdCard.getAbsolutePath() + "/bills"); 

     //create directory if not exist 
     if(!directory.isDirectory()){ 
      directory.mkdirs(); 
     } 

     //file path 
     file= new File(directory, fileName); 
     if (file.exists()) 
      Log.e(taf,"file created"); 
     else 
     Log.e(taf,"file not created"); 

     WorkbookSettings wbSettings = new WorkbookSettings(); 
     wbSettings.setLocale(new Locale("en", "EN")); 
     wbSettings.setUseTemporaryFileDuringWrite(true); 
     WritableWorkbook workbook; 
     workbook=null; 

     try { 
      workbook = Workbook.createWorkbook(file, wbSettings); 
      Log.i(taf,"workbook created"); 
      //Excel sheet name. 0 represents first sheet 
      WritableSheet sheet = workbook.createSheet("MyShoppingList", 0); 

      try { 
       sheet.addCell(new Label(0, 0, "Subject")); // column and row 
       sheet.addCell(new Label(1, 0, "Description")); 


         String title = "blaj"; 
         String desc = "nxjdncj"; 

         int i = 1; 
         sheet.addCell(new Label(0, i, title)); 
         sheet.addCell(new Label(1, i, desc)); 
      } catch (WriteException e) { 
       e.printStackTrace(); 
      } 
      workbook.write(); 
      try { 
       workbook.close(); 
      } catch (WriteException e) { 
       e.printStackTrace(); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    return workbook; 
} 

이며, 로그 메시지 "생성되지 파일은"인쇄됩니다. Im 새로운 안드로이드에 그래서 가장 기본적인 문제를 지적하시기 바랍니다.

감사합니다.

+0

Android 버전이 6.0입니까? –

+0

예. 그것은 사전 마시맬로 장치에서 작동합니다. 나는 marshmallow 장치에 대해 런타임 권한을 추가해야한다는 것을 읽었지 만 이들을 추가하는 방법을 정확히 알지 못합니다. –

답변

3

인스턴스화 File은 파일을 만들지 않고 특정 경로와 파일 이름을 가진 파일이 존재하는지 여부를 File 인스턴스로 제공합니다.

체크 아웃 생성자의 소스 코드 :

public File(String dirPath, String name) { 
    if (name == null) { 
     throw new NullPointerException("name == null"); 
    } 
    if (dirPath == null || dirPath.isEmpty()) { 
     this.path = fixSlashes(name); 
    } else if (name.isEmpty()) { 
     this.path = fixSlashes(dirPath); 
    } else { 
     this.path = fixSlashes(join(dirPath, name)); 
    } 
} 

실제로이 같은 일을 할 수있는 파일을 만들려면 다음

당신은 아래에 하나 더 라인을 추가 할 필요가
if (!file.exists()) { 
    // file does not exist, create it 
    file.createNewFile(); 
} 
0

:

이미 매니페스트 파일에 권한을 추가하시기 바랍니다.