天天看點

[android] android下檔案通路的權限

/**************2016年5月4日 更新**************************/

知乎:android程式設計中寫檔案(例如a.txt)後存在手機哪個位置啊?

用FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); fos.write(content.getBytes()); fos.close(); 建立新檔案并寫入後,在手機中找不到這個檔案,用了搜尋也沒有這個檔案。請問有大神知道檔案會自動存在哪?或者應該用什麼方法來建立一個根目錄下的檔案?

醬油瓶:

不指定的話,在/data/ data/ 應用包名 檔案夾裡

手機沒有root權限的話,data下的資料是看不到的

/****************************************************/

1. 使用Context上下文對象調用openFileOutput(檔案名,mode)可以在/data/data/包名/ 下建立一個檔案輸出對象,其中mode有

Context.MODE_PRIVATE(私有方式),

Context.MODE_WORLD_READABLE(可讀)

Context.MODE_WORLD_WRITEABLE(可寫)

當别的應用讀取私有檔案時會報fileNotFound premission den,

别的應用可以讀取可讀檔案和公開檔案

2. 單選框組<RadioGroup><RadioButton>,預設豎直方向android:orientation=”horizontal”水準,擷取選中的值,RadioGroup對象的getCheckedRadioButtonId(),可以得到被選中的RadioButton

@suppressLint 是壓制警告的作用

3. Linux系統下的檔案權限,10個字元,----------

一般情況下android下每一個應用都是一個獨立的使用者對應一個獨立的組

0位置 - 代表檔案,d代表目錄

1-3位置 目前使用者 r 可讀,w可寫,x可執行

檢視目前使用者群組,cmd進入adb shell,cd到/data/data 執行ls -l就能看到

4-6位置 目前使用者所在的組 r 可讀,w可寫,x可執行

7-9位置 其他使用者的權限,别的應用通路這個檔案相當于這個角色,

- - - - - - - - - - 對應0 000

- rw- - - - - - - 對應0 600

- rw- rw- rw- 對應0 666 在shell下可以使用chmod 666 private.txt 來更改權限

業務代碼修改:

/**
     * 儲存使用者名和方法的業務方法
     * @param context 上下文
     * @param username 使用者名
     * @param password 方法
     * @param mode 1私有 2可讀 3可寫 4公開
     * @return
     */
    @SuppressWarnings("deprecation")
    public static boolean saveUserInfo(Context context,String username,String password,int mode){
        File file=new File(context.getFilesDir(),"info1.txt");
        try {
            FileOutputStream fos = null;
            switch (mode) {
            case 1:
                fos=context.openFileOutput("private.txt", Context.MODE_PRIVATE);
                break;
            case 2:
                fos=context.openFileOutput("readable.txt", Context.MODE_WORLD_READABLE);
                break;
            case 3:
                fos=context.openFileOutput("writeable.txt", Context.MODE_WORLD_WRITEABLE);
                break;
            case 4:
                fos=context.openFileOutput("private.txt", Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);
                break;
            default:
                break;
            }
            String info=username+"##"+password;
            fos.write(info.getBytes());
            fos.close();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        
    }           

複制

繼續閱讀