2015-01-30 3 views
1

외부 sd 카드 (7.9GB)를 마운트했습니다. 다음은 원시 오디오 파일을 내 프로젝트에서 sdcard로 전송하는 데 사용하는 코드입니다. JellyBean 4.2 버전을 사용하고 있습니다. fileManager 응용 프로그램을 사용하여이 작업을 수행 할 수 있습니다. 따라서 sdcard는 확실히 쓰기가 가능합니다.EACCES 권한 거부 파일을 찾을 수 없음

 File storagedir = new File("/mnt/extsd"); 
     if (storagedir.isDirectory()) { 
     String[] dirlist = storagedir.list(); 
     for (int i = 0; i < dirlist.length; i++) { 
      System.out.println(dirlist[i]); 
     } 
     File file = new File(storagedir, "Audio.mp3"); 

     try { 
      InputStream is = getResources().openRawResource(R.raw.audio); 
      OutputStream os = new FileOutputStream(file); 
      byte[] data = new byte[is.available()]; 
      is.read(data); 
      os.write(data); 
      is.close(); 
      os.close(); 
      Toast.makeText(getApplicationContext(), "Saved!", Toast.LENGTH_SHORT).show(); 
     } catch (IOException e) { 
      Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show(); 
     } 

매니페스트 :

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

하지만 파일을 얻을 수없는 예외 :

  java.io.FileNotFoundException: mnt/extsd/Audio.mp3 openfailed: 
      EACCES (Permission Denied) 
+0

는 로그 캣 – krishnan

+0

사용 Environment.getExternalStorageDirectory에 파일 경로를 확인(). – krishnan

+0

@krishnan :하지만 외부 SD 카드 위치를 어떻게 지정합니까? – Susheel

답변

0

그래서 나는 정말 어리석은 실수를 저질렀습니다. 경로 있었어야 :

   File storagedir = new File("/mnt/extsd/"); 

    I missed the 2nd backslash after extsd. 
2

당신은 이상적으로 같은 같은 하드 경로를 사용하지 않아야합니다. http://developer.android.com/reference/android/os/Environment.html에서 오는 문자열을 사용해야합니다.

이 주된 이유는이 문자열이 올바른 값을 반환하기 위해 플랫폼에 따라 변경 될 수 있기 때문입니다.

+0

@ Jox Traex : 이해합니다. 이 경우 파일 경로가 유효합니다. 나는 당신이주의하는 경우에 sysout를 사용하여 그 경로의 밑에 전화 번호부의 이름을 검사하고있다. – Susheel

+0

나는 여러 개의 외부 저장소 디렉토리가 있습니다. 내 외부 sdcard의 마운트 경로는/mnt/extsd입니다. 이 문자열이 없으면 일반적인 Environment.getExternalStorageDirectory() 명령을 어떻게 제공 할 수 있습니까? 앱이 파일을 넣을 외부 저장소의 위치를 ​​어떻게 알 수 있습니까? – Susheel

+0

플랫폼이 경로를 알려주지 않도록 플랫폼을 알고 있다고 가정하지 마십시오. 걱정하지 않으셔도됩니다. – JoxTraex

관련 문제