#Android數(shù)據(jù)存儲(chǔ)的方法(ROM、SD卡见剩、SharedPreference)

一、保存文件到手機(jī)內(nèi)存


/**
     * 保存數(shù)據(jù)到手機(jī)rom的文件里面.
     * @param context 應(yīng)用程序的上下文 提供環(huán)境
     * @param name 用戶名
     * @param password 密碼
     * @throws Exception
     */
public static void saveToRom(Context context, String name , String password) throws Exception{
        //File file = new File("/data/data/com.itheima.login/files/info.txt");
        File file = new File(context.getFilesDir(),"info.txt");//該文件在data下的files文件夾下getCacheDir()在cache文件夾下 文件大小不要超過1Mb
        FileOutputStream fos = new FileOutputStream(file);
        String txt = name+":"+password;
        fos.write(txt.getBytes());
        fos.flush();
        fos.close();
    }





/**
     * 獲取保存的數(shù)據(jù)
     * @param context
     * @return
     */
public static Map<String,String> getUserInfo(Context context) {
        File file = new File(context.getFilesDir(),"info.txt");
        try {
            FileInputStream fis = new FileInputStream(file);
           //也可直接讀取文件String result = StreamTools.readFromStream(fis);
            BufferedReader br = new BufferedReader(new InputStreamReader(fis));
            String str = br.readLine();
            String[] infos = str.split(":");
            Map<String,String> map = new HashMap<String, String>();
            map.put("username", infos[0]);
            map.put("password", infos[1]);
            return map;
        } catch(Exception e) {
            
            e.printStackTrace();
            return null;
        }
        
    }
//最后可以直接調(diào)用上面的方法讀取信息
Map<String, String> map = getUserInfo(this);
If(map!=null){
Textview.setText(map.get(“username”));
}

二、保存文件到SD卡

獲取手機(jī)sd空間的大形蝰谩:

File path = Environment.getExternalStorageDirectory();
        StatFs stat = new StatFs(path.getPath());
        long blockSize = stat.getBlockSize();
        long totalBlocks = stat.getBlockCount();
        long availableBlocks = stat.getAvailableBlocks();
        long totalSize = blockSize*totalBlocks;
        long availSize = blockSize * availableBlocks;
        
        String totalStr = Formatter.formatFileSize(this,totalSize);
        String availStr = Formatter.formatFileSize(this, availSize);
        tv.setText("總空間"+totalStr+"\n"+"可用空間"+availStr);


加入寫外部存儲(chǔ)的權(quán)限:

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

public static void save(String name ,String password) throws Exception{
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File file = new File(Environment.getExternalStorageDirectory(),"info.txt");
//也可直接寫/sdcard/info.txt 先判斷sd卡是否存在
        FileOutputStream fos = new FileOutputStream(file);
        String txt = name+":"+password;
        fos.write(txt.getBytes());
        fos.flush();
        fos.close();
// 使用RandomAccessFile像文件追加內(nèi)容FileOutputStream會(huì)把原有的文件內(nèi)容清空
//RandomAccessFile raf = new RandomAccessFile(file,"rw");
//raf.seek(file.length());  將文件指針移動(dòng)到最后
//raf.write(name.getBytes()+password.getBytes());
//raf.close();
    }
}



//讀取文件 加入讀取權(quán)限
public static String read(){
            try {
                if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
                    File sdcardDir = Environment.getExternalStorageDirectory();
                    FileInputStream fis = new FileInputStream(sdcardDir.getCanonicalPath() + "info.txt");
                    BufferedReader br = new BufferedReader(new InputStreamReader(fis));
                    StringBuilder sb = new StringBuilder("");
                    String line = null;
                    while ((line = br.readLine())!= null){
                        sb.append(line);
                    }
                    return sb.toString();
                }
            }  catch (Exception e) {
                
                e.printStackTrace();
            }
            return null;
        }

三、Sharedpreferences的使用

SharedPreference是開發(fā)中常用的一種存儲(chǔ)方式栓拜,主要存儲(chǔ)一些系統(tǒng)不變的參數(shù)如是否是第一次進(jìn)入應(yīng)用程序等座泳,通過鍵值對(duì)的方式進(jìn)行存儲(chǔ)

可以存儲(chǔ)的類型:booleans, floats, ints, longs,strings.

  • getSharedPreferences() - 存儲(chǔ)多個(gè)參數(shù)
  • getPreferences() - 僅存儲(chǔ)一個(gè)參數(shù)并且不需要指定名字(key)

寫入的步驟:

  1. SharedPreferences調(diào)用edit()得到一個(gè)Editor對(duì)象
  2. 使用 putBoolean() and putString()添加值
  3. 提交事務(wù)完成存儲(chǔ)

讀取時(shí):只需要調(diào)用SharedPreferences的getBoolean() and getString()

下面是示例代碼:

public class MySharedPreference {
    private Context context;
    private SharedPreferences sp ;
    private Editor edit;
    public MySharedPreference(Context context){
        this.context = context;
    }
    public boolean saveMessage(String name,String pwd){
        boolean flag = false;
         sp = context.getSharedPreferences("userInfo",Context.MODE_PRIVATE);
         //MODE定義了訪問的權(quán)限現(xiàn)在是本應(yīng)用可以訪問
        edit = sp.edit();
        edit.putString("name", name);
        edit.putString("pwd", pwd);
        flag = edit.commit();//提交事務(wù)將數(shù)據(jù)持久化到存儲(chǔ)器中
        return flag;
        
    }
    public Map<String,Object> getMessage(){
        Map<String,Object> map = new HashMap<String, Object>();
        sp = context.getSharedPreferences("userInfo", Context.MODE_PRIVATE);
        String name = sp.getString("name", "");
        String pwd = sp.getString("pwd", "");
        map.put("name", name);
        map.put("pwd",pwd);
        return map;
        
    }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市幕与,隨后出現(xiàn)的幾起案子挑势,更是在濱河造成了極大的恐慌,老刑警劉巖啦鸣,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件潮饱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡诫给,警方通過查閱死者的電腦和手機(jī)香拉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門啦扬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人凫碌,你說我怎么就攤上這事扑毡。” “怎么了盛险?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵瞄摊,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我苦掘,道長(zhǎng)换帜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任鸟蜡,我火速辦了婚禮膜赃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘揉忘。我一直安慰自己跳座,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布泣矛。 她就那樣靜靜地躺著疲眷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪您朽。 梳的紋絲不亂的頭發(fā)上狂丝,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音哗总,去河邊找鬼几颜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛讯屈,可吹牛的內(nèi)容都是我干的蛋哭。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼涮母,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼谆趾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起叛本,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤沪蓬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后来候,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體跷叉,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了性芬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片峡眶。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖植锉,靈堂內(nèi)的尸體忽然破棺而出辫樱,到底是詐尸還是另有隱情,我是刑警寧澤俊庇,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布狮暑,位于F島的核電站,受9級(jí)特大地震影響辉饱,放射性物質(zhì)發(fā)生泄漏搬男。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一彭沼、第九天 我趴在偏房一處隱蔽的房頂上張望缔逛。 院中可真熱鬧,春花似錦姓惑、人聲如沸褐奴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽敦冬。三九已至,卻和暖如春唯沮,著一層夾襖步出監(jiān)牢的瞬間脖旱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工介蛉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留萌庆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓币旧,卻偏偏與公主長(zhǎng)得像践险,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子佳恬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容