簡體   English   中英

如何在Android外部存儲中保存公共文件

[英]how to Save Public File in Android external storage

我正在開發一個Android應用,其中我將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:打開失敗:ENOENT(無此類文件或目錄)

我的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上也嘗試了答案

但又是錯誤:

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

在第一個錯誤中,您使用了錯誤的路徑(我想)。 從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"/>

希望對您有所幫助。

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"/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM