2014-09-08 2 views
1

Itext를 사용하여 PDF를 만들려고 시도하는 동안 IOException이 발생합니다. 오류는 내가 매니페스트 파일에 필요한 권한을 추가 한대로 읽기 전용 저장소에 쓰기를 시도하고 있다고 말합니다.android와 함께 IText를 사용하여 PDF를 작성하는 동안 IOException 가져 오기

코도 바 3.5입니다.

public class PdfCreator { 
String TAG = "PdfCreator"; 

public void createPdf(){ 
    try { 
     Log.d(TAG, Environment.getExternalStorageDirectory().getPath() + "/Hello.pdf");    
     OutputStream file = new FileOutputStream(new File(Environment.getExternalStorageDirectory().getPath() + "/Hello.pdf"));    
     Document document = new Document(); 
     PdfWriter.getInstance(document, file); 
     document.open(); 
     document.add(new Paragraph("Hello world, iText")); 
     document.close(); 
     file.close(); 

    } catch (Exception e) { 

     e.printStackTrace(); 
    } 
} 

스테이크 추적 : 어떤 도움에 감사드립니다

09-08 05:15:42.501: W/System.err(1114): java.io.FileNotFoundException: /storage/sdcard/Hello.pdf:   open failed: EROFS (Read-only file system) 
09-08 05:15:42.531: W/System.err(1114):  at libcore.io.IoBridge.open(IoBridge.java:409) 
09-08 05:15:42.531: W/System.err(1114):  at java.io.FileOutputStream.<init>  (FileOutputStream.java:88) 
09-08 05:15:42.581: W/System.err(1114):  at java.io.FileOutputStream.<init> (FileOutputStream.java:73) 
09-08 05:15:42.581: W/System.err(1114):  at com.idsil.pdfapp.PdfCreator.createPdf(PdfCreator.java:19) 
09-08 05:15:42.581: W/System.err(1114):  at com.idsil.pdfapp.PdfApp.onCreate(PdfApp.java:36) 
09-08 05:15:42.581: W/System.err(1114):  at android.app.Activity.performCreate(Activity.java:5133) 
09-08 05:15:42.581: W/System.err(1114):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
09-08 05:15:42.581: W/System.err(1114):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175) 
09-08 05:15:42.581: W/System.err(1114):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 
09-08 05:15:42.591: W/System.err(1114):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
09-08 05:15:42.591: W/System.err(1114):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
09-08 05:15:42.631: W/System.err(1114):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-08 05:15:42.631: W/System.err(1114):  at android.os.Looper.loop(Looper.java:137) 
09-08 05:15:42.658: W/System.err(1114):  at android.app.ActivityThread.main(ActivityThread.java:5103) 
09-08 05:15:42.661: W/System.err(1114):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-08 05:15:42.661: W/System.err(1114):  at java.lang.reflect.Method.invoke(Method.java:525) 
09-08 05:15:42.661: W/System.err(1114):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
09-08 05:15:42.661: W/System.err(1114):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
09-08 05:15:42.661: W/System.err(1114):  at dalvik.system.NativeStart.main(Native Method) 
09-08 05:15:42.691: W/System.err(1114): Caused by: libcore.io.ErrnoException: open failed: EROFS (Read-only file system) 
09-08 05:15:42.691: W/System.err(1114):  at libcore.io.Posix.open(Native Method) 
09-08 05:15:42.691: W/System.err(1114):  at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110) 
09-08 05:15:42.691: W/System.err(1114):  at libcore.io.IoBridge.open(IoBridge.java:393) 

여기

는 코드입니다.

미리 감사드립니다.

Environment.getExternalStorageDirectory().getAbsolutePath()+"/Hello.pdf" 

use .getAbsolutePath() instead of .getPath().. 

이런 식으로 파일을 생성

+0

당신이 당신의 매니페스트에' "는'android.permission.WRITE_EXTERNAL_STORAGE을 줬나 봅니다, 새 에뮬레이터를 만들고 200 이상에 SD 카드의 크기를 부여? – Apoorv

+0

예, 받았습니다. 내 AVD의 파일 탐색기에서 dr-xr-xr-x와 같은 사용 권한이있는 storage/sdcard /를 보여줍니다. 글을 쓸 권한이 없지만 왜 그런지 이해할 수 없습니다. – JSNinja

답변

1

이 시도,

InputStream input = null; 
OutputStream output = null; 

File folder = new File("/sdcard", "hellofolder"); 
folder.mkdirs(); 

File myFile = new File("/sdcard/hellofolder/hello.pdf"); 
output = new FileOutputStream(myFile); 

Mainfest.xml

매니페스트

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

또는의 자식으로이 추가 일단 실제 장치로 시도하십시오. 또는

+0

Thanks @Rajesh M, .getAbsolutePath()를 시도했지만 작동하지 않았습니다. storage/sdcard /에 쓰기 권한이없는 것 같습니다. 어떻게 변경할 수 있습니까? – JSNinja

+0

나는 폴더를 만들지 말고, 폴더를 만들고 나서 파일을 작성한다고 생각한다. 코드를 업데이트했다. –

+0

sdcard 폴더가 읽기 전용이므로 폴더를 만들지 않으려 고 시도했다. 나는 이유를 알 수 없다. dr-xr-xr-x 사용 권한이 있습니다. – JSNinja

0


eString filePath = context.getFilesDir().getPath().toString() + "/Hello.pdf"; File f = new File(filePath); OutputStream file = new FileOutputStream(f);

관련 문제