2016-12-28 1 views
0

로깅 할 파일을 만들려고하지만 파일을 만들 때 파일 또는 디렉토리를 찾을 수 없습니다. 오류가 발생합니다. 내가 뭘 잘못하고 있는지 잘 모르겠다. 파일을 만드는 코드는 다음과 같습니다.Android 로그 파일 IO - 파일/디렉토리를 찾을 수 없음 오류

File directory = new File(Environment.DIRECTORY_DOCUMENTS,"test"); 
    directory.mkdirs(); 

    File file = new File(directory, fileName.trim()+".txt"); 

    if(!file.exists()){ 
     try { 
      file.createNewFile(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      return false; 
     } 

    } 

createNewFile()에 의해 오류가 발생합니다. 이 오류의 원인은 무엇입니까?

+0

매니페스트에 쓰기 권한을 추가하고 문서 디렉토리가 있습니까? – Rahul

+0

예, 매니페스트에 추가 된 읽기 및 쓰기 권한이 있습니다. – David

+0

디렉토리 문서가 존재합니까? – Rahul

답변

0

문제는 앱이 greenapps가 제안한대로 런타임에 권한을 요청하지 않아서 발생했습니다.

0

먼저 문서 디렉토리를 만듭니다.

File docDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS); 
    if (!docDir.exists()) { 
     if(docDir.mkdirs()) { 
     File directory = new File(docDir,"test"); 

    } else { 
    // Unable to create document directory. check Run time permissions 
    } 
} 
+0

'먼저 문서 디렉토리를 만드십시오 .' 잘못된. 표준 문서 디렉토리를 사용하십시오. 또한 mkdir의 반환 값을 보는 것을 잊어 버릴 수도 있습니다. – greenapps

+0

mkdirs()가 여전히 false를 반환 중입니다. – David

+0

@greenapps 내 대답이 업데이트되고 디렉토리 생성에 대한 확인이 추가되었습니다. – Rahul

0

정상적인 문서 디렉토리를 검색하려면 getExternalPublicDirectory(Environment.DIRECTORY_DOCUMENTS)을 사용해야합니다.

directory.mkdirs(); 

맹목적으로 mkdirs를 호출하지 마십시오. 그러나 디렉토리가 존재하지 않는 경우에만. 그런 다음 반환 값을 확인하지 못하면 반환 값을 확인하십시오.

+0

이 테스트가 조금 있습니다. getExternalPublicDirectory (Environment.DIRECTORY_DOCUMENTS)는 제안한 문서 디렉토리에 대한 액세스 권한을 제공하지만 하위 디렉토리를 만들 때이 디렉토리를 사용하려고하면 mkdir은 여전히 ​​false를 반환합니다. 나는 mkdir과 ​​mkdirs를 모두 시도했다. – David

+0

사용중인 Android 버전은 무엇입니까? 매니페스트 파일에 쓰기 권한을 요청 했습니까? Android 6 이상에서 런타임에 이러한 권한을 확인하도록 사용자에게 요청하는 코드를 추가 했습니까? – greenapps

+0

다음과 같은 디렉토리를 생성합니다. File directory = new File (getExternalPublicDirectory (Environment.DIRECTORY_DOCUMENTS), "test"); directory.mkdir() 및 directory.mkdirs()는 모두 false를 반환합니다. 왜 디렉토리를 만들 수 없습니까? – David

관련 문제