簡體   English   中英

需要幫助將文件寫入外部存儲

[英]Need help writing file to external storage

我已經在互聯網上搜索了幾個小時,以期找到對我真正有用的文件寫入功能。 到目前為止,我的MainActivity.java中包含以下內容:

public void writeToFile(String data, Context ctx) {
    File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS);
    File tempFile = new File(path, "houseDataFile.txt");
    if(!tempFile.exists()){
        tempFile.mkdirs();
    }
    try
    {
        FileOutputStream fOut = new FileOutputStream(tempFile);
        fOut.write(data.getBytes());
        fOut.close();
        Toast.makeText(ctx, "Saved", Toast.LENGTH_SHORT).show();
    }catch (Exception e)
    {
        Log.w(TAG, "FileOutputStream exception: - " + e.toString());
    }
}

我的Android清單包含兩個權限:

<?xml version="1.0" encoding="utf-8"?>
<manifest package="my.package.application"xmlns:android="http://schemas.android.com/apk/res/android">

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

<application

    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">

    </activity>
    <activity android:name=".Menu_activity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>

            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
</application>

雖然在運行應用程序並調用writeToFile()時令人沮喪,但它卻給我一個錯誤:

W/MainActivity: FileOutputStream exception: - java.io.FileNotFoundException: /storage/emulated/0/Documents/houseDataFile.txt: open failed: ENOENT (No such file or directory)

任何幫助將不勝感激,在此先感謝您。

我假設您無法獲取文件路徑,因為您在執行方法時不詢問運行時權限。 在這里,您可以看一下下面的代碼。

首先,檢查您設備的操作系統版本是否高於Lollipop。 如果在上方,則顯示權限彈出對話框。

final int MyVersion = Build.VERSION.SDK_INT;
if (MyVersion > Build.VERSION_CODES.LOLLIPOP_MR1)
{
    if (!checkIfAlreadyhavePermission())
    {
        ActivityCompat.requestPermissions(ProfileActivity.this, new String[] {android.Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
    }
    else
    {
        writeToFile(data, ctx);
    }
}
else
{
    writeToFile(data, ctx)
}

 private boolean checkIfAlreadyhavePermission() {
    int result = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
    return result == PackageManager.PERMISSION_GRANTED;
}

然后在OnRequestPerMissionResult()中定義“允許”和“拒絕”按鈕功能。

 public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case 1: {
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    writeToFile( data, ctx);

                } else {
                    Toast.makeText(YourActivity.this, "Please provide permission", Toast.LENGTH_LONG).show();
                }
                break;
            }
    }

請告訴我是否可以解決問題。

暫無
暫無

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

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