2014-12-18 2 views
0

인터넷에서 외부 디렉토리로 pdf 파일을 다운로드하는 안드로이드 응용 프로그램을 개발 중입니다. 여러 방법으로 시도했지만 항상 오류가 있습니다. 나는 연속적으로 아래의 오류 내 코드를 나열하고 있습니다 :안드로이드 외부 저장 장치에 공용 파일 저장하는 방법

1.

String fname=title+".pdf"; 
loc="/sdcard"+"/"+fname; 
output=new FileOutputStream(loc); 

오류 :

BookActivity(1255): /sdcard/Pragmatic Unit Testing in Java with JUnit.pdf: open failed: EACCES (Permission denied) 

2.

File outputdir=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); 
String fname=title+".pdf"; 
loc=outputdir.getAbsolutePath() 
output=new FileOutputStream(loc); 

오류 : BookActivity (1172) PHP Developers.pdf의 /storage/sdcard/Download/Node.js : open failed : ENOE NT (해당 파일 또는 디렉터리)

내의 AndroidManifest.xml 파일에서이 권한이 :

<!-- Permission: Allow Connect to Internet --> 
<uses-permission android:name="android.permission.INTERNET" /> 
<!-- Permission: Writing to SDCard --> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" 
    android:maxSdkVersion="18" /> 

무엇을 저를 도와주세요? 공개 파일을 내부 저장소에 저장하는 방법을 알려주는 경우에도 가능합니다.

https://stackoverflow.com/a/7887114/964741

에 대답을 시도했지만 다시 arror :

BookActivity(1319): /storage/sdcard/Apache Axis2 Web Services, 2nd Edition.pdf: open failed: EACCES (Permission denied) 
+0

모습입니다 http://stackoverflow.com/a/7887114/964741 –

+0

'loc = outputdir.outputdir.getAbsolutePath()'여기서'outputdir'가 두 번 사용되는 이유는 무엇입니까? – codePG

+0

그건 내 실수 였어. –

답변

1

를 첫 번째 오류는 잘못된 경로 (내 생각)를 사용하고 있습니다. 4.4 버전 (나도 잘 모르겠다)부터 외부 장치에 액세스하는 방법이 바뀌 었습니다.

당신이 작성해야 :

String fname=title+".pdf"; 
loc="/mnt/media_rw/sdcard"+"/"+fname; 
output=new FileOutputStream(loc); 

을 나는 그것이 올바른 방법이라고 생각합니다.

내가 이렇게 내 매니페스트 파일에 대한 권한을 정의 :

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

나는 그것이 도움이되기를 바랍니다.

+0

아니, 잘 작동하지 않아. 다시 같은 오류. –

+0

에뮬레이터 때문입니까 ?? 아직 물리적 장치에서 시도하지 않았습니다. –

+0

글쎄, 당신이 제공하지 않은 중요한 정보였습니다. 불행히도 나는 물리적 장치 만 사용합니다. 하지만 시뮬레이션 된 SD 카드에 대한 자세한 정보는 http://developer.android.com/tools/devices/emulator에서 확인할 수 있습니다.HTML 번호의 sdcard에 여기 : http://developer.android.com/tools/help/mksdcard.html –

1

1> sdcard에 데이터 파일을 작성하려면 : -

private void writeTextFileToSdcard(File fileObj, String fileName, String fileData) { 

     fileObj.mkdirs(); 
     File file = new File(fileObj, fileName); 
     if (file.exists()) 
      file.delete(); 
     try { 
      FileOutputStream out = new FileOutputStream(file); 
      OutputStreamWriter myOutWriter = new OutputStreamWriter(out); 
      myOutWriter.append(fileData); 
      myOutWriter.close(); 
      out.flush(); 
      out.close(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

2> sdacrd하는 이미지를 작성하려면 : -

private void writeImageFileToSdcard(Bitmap finalBitmap) { 

    String root = Environment.getExternalStorageDirectory().toString(); 
    File myDir = new File(root + "/My_Images");  
    myDir.mkdirs(); 
    String fname = "Image1.jpg"; 
    File file = new File (myDir, fname); 
    if (file.exists()) file.delete(); 
    try { 
      FileOutputStream out = new FileOutputStream(file); 
      finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); 
      out.flush(); 
      out.close(); 

    } catch (Exception e) { 
      e.printStackTrace(); 
    } 
} 

권한이 응답에서 필수

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

아니, 심지어없는 작품 .......... –

+0

나에게 한 가지를 물어 보자, 나는 Google 개발자 사이트에서 sdk 19에서 우리가 권한을 필요로하지 않았 음을 확인하여 사용 권한에서 maxSdk 선언을 사용했습니다. 그것은 새로운 허가가 필요합니까 ??? –

+0

예 (모든 버전에서는 필수) 작동하지 않는 경우 오류 로그를 공유 할 수 있습니까? –

관련 문제