亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android編程中FileOutputStream與openFileOutput()的區(qū)別分析

 更新時(shí)間:2016年02月05日 10:21:46   作者:lee0oo0  
這篇文章主要介紹了Android編程中FileOutputStream與openFileOutput()的區(qū)別,結(jié)合實(shí)例形式分析了FileOutputStream與openFileOutput()的功能,使用技巧與用法區(qū)別,需要的朋友可以參考下

本文實(shí)例分析了Android編程中FileOutputStream與openFileOutput()的區(qū)別。分享給大家供大家參考,具體如下:

openFileOutput()

首先給大家介紹使用文件如何對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ),Activity提供了openFileOutput()方法可以用于把數(shù)據(jù)輸出到文件中,具體的實(shí)現(xiàn)過程與在J2SE環(huán)境中保存數(shù)據(jù)到文件中是一樣的。

public void save()
{
    try {
      FileOutputStream outStream=this.openFileOutput("a.txt",Context.MODE_WORLD_READABLE);
      outStream.write(text.getText().toString().getBytes());
      outStream.close();
      Toast.makeText(MyActivity.this,"Saved",Toast.LENGTH_LONG).show();
    } catch (FileNotFoundException e) {
      return;
    }
    catch (IOException e){
      return ;
    }
}

openFileOutput()方法的第一參數(shù)用于指定文件名稱,不能包含路徑分隔符"/" ,如果文件不存在,Android 會(huì)自動(dòng)創(chuàng)建它。創(chuàng)建的文件保存在/data/data/<package name>/files目錄,如: /data/data/cn.itcast.action/files/itcast.txt ,通過點(diǎn)擊Eclipse菜單"Window"-"Show View"-"Other",在對(duì)話窗口中展開android文件夾,選擇下面的File Explorer視圖,然后在File Explorer視圖中展開/data/data/<package name>/files目錄就可以看到該文件。

openFileOutput()方法的第二參數(shù)用于指定操作模式,有四種模式,分別為: Context.MODE_PRIVATE    =  0
Context.MODE_APPEND    =  32768
Context.MODE_WORLD_READABLE =  1
Context.MODE_WORLD_WRITEABLE =  2
Context.MODE_PRIVATE:為默認(rèn)操作模式,代表該文件是私有數(shù)據(jù),只能被應(yīng)用本身訪問,在該模式下,寫入的內(nèi)容會(huì)覆蓋原文件的內(nèi)容,如果想把新寫入的內(nèi)容追加到原文件中??梢允褂肅ontext.MODE_APPEND
Context.MODE_APPEND:模式會(huì)檢查文件是否存在,存在就往文件追加內(nèi)容,否則就創(chuàng)建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來控制其他應(yīng)用是否有權(quán)限讀寫該文件。
MODE_WORLD_READABLE:表示當(dāng)前文件可以被其他應(yīng)用讀??;MODE_WORLD_WRITEABLE:表示當(dāng)前文件可以被其他應(yīng)用寫入。
如果希望文件被其他應(yīng)用讀和寫,可以傳入:

復(fù)制代碼 代碼如下:
openFileOutput("itcast.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);

android有一套自己的安全模型,當(dāng)應(yīng)用程序(.apk)在安裝時(shí)系統(tǒng)就會(huì)分配給他一個(gè)userid,當(dāng)該應(yīng)用要去訪問其他資源比如文件的時(shí)候,就需要userid匹配。默認(rèn)情況下,任何應(yīng)用創(chuàng)建的文件,sharedpreferences,數(shù)據(jù)庫都應(yīng)該是私有的(位于/data/data/<package name>/files),其他程序無法訪問。除非在創(chuàng)建時(shí)指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE ,只有這樣其他程序才能正確訪問。

讀取文件內(nèi)容

public void load()
{
  try {
    FileInputStream inStream=this.openFileInput("a.txt");
    ByteArrayOutputStream stream=new ByteArrayOutputStream();
    byte[] buffer=new byte[1024];
    int length=-1;
    while((length=inStream.read(buffer))!=-1)  {
      stream.write(buffer,0,length);
    }
    stream.close();
    inStream.close();
    text.setText(stream.toString());
    Toast.makeText(MyActivity.this,"Loaded",Toast.LENGTH_LONG).show();
  } catch (FileNotFoundException e) {
    e.printStackTrace();
  }
  catch (IOException e){
    return ;
  }
}

對(duì)于私有文件只能被創(chuàng)建該文件的應(yīng)用訪問,如果希望文件能被其他應(yīng)用讀和寫,可以在創(chuàng)建文件時(shí),指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE權(quán)限。

Activity還提供了getCacheDir()和getFilesDir()方法:
getCacheDir()方法用于獲取/data/data/<package name>/cache目錄
getFilesDir()方法用于獲取/data/data/<package name>/files目錄

把文件放入SD卡

使用Activity的openFileOutput()方法保存文件,文件是存放在手機(jī)空間上,一般手機(jī)的存儲(chǔ)空間不是很大,存放些小文件還行,如果要存放像視頻這樣的大文件,是不可行的。對(duì)于像視頻這樣的大文件,我們可以把它存放在SDCard。 SDCard是干什么的?你可以把它看作是移動(dòng)硬盤或U盤。

在模擬器中使用SDCard,你需要先創(chuàng)建一張SDCard卡(當(dāng)然不是真的SDCard,只是鏡像文件)。創(chuàng)建SDCard可以在Eclipse創(chuàng)建模擬器時(shí)隨同創(chuàng)建,也可以使用DOS命令進(jìn)行創(chuàng)建,如下:

在Dos窗口中進(jìn)入android SDK安裝路徑的tools目錄,輸入以下命令創(chuàng)建一張容量為2G的SDCard,文件后綴可以隨便取,建議使用.img:

mksdcard 2048M D:\AndroidTool\sdcard.img

在程序中訪問SDCard,你需要申請(qǐng)?jiān)L問SDCard的權(quán)限。

在AndroidManifest.xml中加入訪問SDCard的權(quán)限如下:

<!– 在SDCard中創(chuàng)建與刪除文件權(quán)限 –>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!– 往SDCard寫入數(shù)據(jù)權(quán)限 –>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

要往SDCard存放文件,程序必須先判斷手機(jī)是否裝有SDCard,并且可以進(jìn)行讀寫。

注意訪問SDCard必須在AndroidManifest.xml中加入訪問SDCard的權(quán)限

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
   File sdCardDir = Environment.getExternalStorageDirectory();//獲取SDCard目錄
   File saveFile = new File(sdCardDir, "a.txt");
   FileOutputStream outStream = new FileOutputStream(saveFile);
   outStream.write("test".getBytes());
   outStream.close();
}

Environment.getExternalStorageState()方法用于獲取SDCard的狀態(tài),如果手機(jī)裝有SDCard,并且可以進(jìn)行讀寫,那么方法返回的狀態(tài)等于Environment.MEDIA_MOUNTED。

Environment.getExternalStorageDirectory()方法用于獲取SDCard的目錄,當(dāng)然要獲取SDCard的目錄,你也可以這樣寫:

File sdCardDir = new File("/sdcard"); //獲取SDCard目錄
File saveFile = new File(sdCardDir, "itcast.txt"); 
//上面兩句代碼可以合成一句: File saveFile = new File("/sdcard/a.txt");
FileOutputStream outStream = new FileOutputStream(saveFile);
outStream.write("test".getBytes());
outStream.close();

最后附上一個(gè)使用openFileOutput的例子存取對(duì)象:

public class MainActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  }
  public void button(View view){
    Person p = new Person();
    p.setAge(10);
    p.setName("Lee");
    saveObject(p, "MainActivity.dat");
  }
  public void button2(View view){
    Person p = (Person) readObject("MainActivity.dat");
    System.out.println(p.getAge());
  }
  public boolean saveObject(Serializable ser, String file) {
    FileOutputStream fos = null;
    ObjectOutputStream oos = null;
    try{
      fos = openFileOutput(file, MODE_PRIVATE);
      oos = new ObjectOutputStream(fos);
      oos.writeObject(ser);
      oos.flush();
      return true;
    }catch(Exception e){
      e.printStackTrace();
      return false;
    }finally{
      try {
        oos.close();
      } catch (Exception e) {}
      try {
        fos.close();
      } catch (Exception e) {}
    }
  }
  /**
   * 讀取對(duì)象
   * @param file
   * @return
   * @throws IOException
   */
  public Serializable readObject(String file){
    FileInputStream fis = null;
    ObjectInputStream ois = null;
    try{
      fis = openFileInput(file);
      ois = new ObjectInputStream(fis);
      return (Serializable)ois.readObject();
    }catch(FileNotFoundException e){
    }catch(Exception e){
      e.printStackTrace();
      //反序列化失敗 - 刪除緩存文件
      if(e instanceof InvalidClassException){
        File data = getFileStreamPath(file);
        data.delete();
      }
    }finally{
      try {
        ois.close();
      } catch (Exception e) {}
      try {
        fis.close();
      } catch (Exception e) {}
    }
    return null;
  }
}
class Person implements Serializable{
  int age;
  String name;
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
}

更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android開發(fā)入門與進(jìn)階教程》、《Android數(shù)據(jù)庫操作技巧總結(jié)》及《Android控件用法總結(jié)

希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Android自定義View實(shí)現(xiàn)簡單炫酷的球體進(jìn)度球?qū)嵗a

    Android自定義View實(shí)現(xiàn)簡單炫酷的球體進(jìn)度球?qū)嵗a

    這篇文章主要給大家介紹了關(guān)于Android自定義View實(shí)現(xiàn)簡單炫酷的球體進(jìn)度球的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • Android Studio使用教程(六):Gradle多渠道打包

    Android Studio使用教程(六):Gradle多渠道打包

    這篇文章主要介紹了Android Studio使用教程(六):Gradle多渠道打包,本文講解了友盟多渠道打包、assemble結(jié)合Build Variants來創(chuàng)建task、完整的gradle腳本等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • Kotlin類與屬性及構(gòu)造函數(shù)的使用詳解

    Kotlin類與屬性及構(gòu)造函數(shù)的使用詳解

    這篇文章主要介紹了Kotlin語言中類與屬性及構(gòu)造函數(shù)的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09
  • 一看就懂的Android APP開發(fā)入門教程

    一看就懂的Android APP開發(fā)入門教程

    這篇文章主要介紹了Android APP開發(fā)入門教程,從SDK下載、開發(fā)環(huán)境搭建、代碼編寫、APP打包等步驟一一講解,非常簡明的一個(gè)Android APP開發(fā)入門教程,需要的朋友可以參考下
    2014-05-05
  • android實(shí)現(xiàn)圖片裁剪的兩種方法

    android實(shí)現(xiàn)圖片裁剪的兩種方法

    這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)圖片裁剪的兩種方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 簡單實(shí)現(xiàn)Android繪圖板

    簡單實(shí)現(xiàn)Android繪圖板

    這篇文章主要教大家如何簡單實(shí)現(xiàn)Android繪圖板,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • android中AutoCompleteTextView的簡單用法(實(shí)現(xiàn)搜索歷史)

    android中AutoCompleteTextView的簡單用法(實(shí)現(xiàn)搜索歷史)

    本篇文章主要介紹了android中AutoCompleteTextView的簡單用法(自動(dòng)提示),有需要的可以了解一下。
    2016-11-11
  • Android 中 ThreadLocal使用示例

    Android 中 ThreadLocal使用示例

    這篇文章主要介紹了Android 中 ThreadLocal使用示例的相關(guān)資料,這里提供示例代碼幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • Android 滑動(dòng)小圓點(diǎn)ViewPager的兩種設(shè)置方法詳解流程

    Android 滑動(dòng)小圓點(diǎn)ViewPager的兩種設(shè)置方法詳解流程

    Viewpager,視圖翻頁工具,提供了多頁面切換的效果。Android 3.0后引入的一個(gè)UI控件,位于v4包中。低版本使用需要導(dǎo)入v4包,現(xiàn)在我們一般不再兼容3.0及以下版本,另外使用Android studio開發(fā),默認(rèn)導(dǎo)入v7包,v7包含了v4,所以不用導(dǎo)包,越來越方便了
    2021-11-11
  • 淺談Android RecyclerView 間距全適配

    淺談Android RecyclerView 間距全適配

    本篇文章主要介紹了淺談Android RecyclerView 間距全適配,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12

最新評(píng)論