2013-11-04 57 views
3

我讓用戶從SD卡中選擇要上傳的文件到我的服務器,並保存獲取onActivityResult充分利用SD卡文件,烏里

例如還給我Uri

file:///storage/emulated/0/Download/menu-4.27.13.pdf 

當我嘗試將其轉換爲字節數組發送給我得到的FileNotFoundException

if(!fileURI.equals("")){ 
    File pdf = new File(fileURI); 
    try 
    { 
     FileInputStream fin = new FileInputStream(pdf); 

     byte fileContent[] = new byte[(int)pdf.length()]; 
     fin.read(fileContent); 
     fin.close(); 

     String pdfString = Base64.encode(fileContent); 
     sb.append(pdfString); 
    } 
    catch (FileNotFoundException e) 
    { 
     e.printStackTrace(); 
    } 
    catch(IOException ioe) 
    { 
     ioe.printStackTrace();      
    } 
} 

} 

堆棧跟蹤服務器

11-04 11:57:30.597: W/System.err(13531): java.io.FileNotFoundException: /file:/storage/emulated/0/Download/menu-4.27.13.pdf: open failed: ENOENT (No such file or directory) 
11-04 11:57:30.597: W/System.err(13531): at libcore.io.IoBridge.open(IoBridge.java:409) 
11-04 11:57:30.607: W/System.err(13531): at java.io.FileInputStream.<init>(FileInputStream.java:78) 
11-04 11:57:30.607: W/System.err(13531): at com.ecm2.mobilemap.services.MessageService.getModifiedElements(MessageService.java:2755) 
11-04 11:57:30.617: W/System.err(13531): at com.ecm2.mobilemap.services.MessageService.callSync(MessageService.java:2433) 
11-04 11:57:30.617: W/System.err(13531): at com.ecm2.mobilemap.services.MessageService.onHandleIntent(MessageService.java:190) 
11-04 11:57:30.627: W/System.err(13531): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65) 
11-04 11:57:30.627: W/System.err(13531): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-04 11:57:30.637: W/System.err(13531): at android.os.Looper.loop(Looper.java:137) 
11-04 11:57:30.637: W/System.err(13531): at android.os.HandlerThread.run(HandlerThread.java:61) 
11-04 11:57:30.637: W/System.err(13531): Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory) 
11-04 11:57:30.647: W/System.err(13531): at libcore.io.Posix.open(Native Method) 
11-04 11:57:30.657: W/System.err(13531): at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110) 
11-04 11:57:30.657: W/System.err(13531): at libcore.io.IoBridge.open(IoBridge.java:393) 

是不是對象作爲初始化時的字符串?爲什麼我收到FileNotFoundException當我有Uri返回給我當用戶選擇文件

+0

可能是你可以使用內容解析器 見 - http://stackoverflow.com/questions/10021528/open-file-from-uri-independent-of-location-in-android – ranjk89

+0

日誌中的文件路徑「/file:/storage/emulated/0/Download/menu-4.27.13.pdf」不正確。也許你正在使用不正確的方式來獲取文件路徑。 – jagmohan

回答

11

您的Uri包含您需要刪除的file:方案。使用Uri.parse,算起來烏里包含在你的字符串,使用uri.getPath(),你提取的URI的文件路徑:

Uri uri = Uri.parse(fileURI); 
File pdf = new File(uri.getPath()); 
+0

就是這樣,謝謝 – tyczj

+0

這花了我很長時間才找到答案,但是當你想到時很明顯。謝謝 – danielcooperxyz

+0

什麼是fileURI在這種情況下? –

0

您的代碼是正確的,也許文件不存在或路徑錯誤。 查看堆棧跟蹤。第一行本身講述了整個問題。嘗試訪問其他文件並首先使用URI解析文件路徑