欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

android I/0流操作文件(文件存儲(chǔ))

 更新時(shí)間:2021年06月17日 17:29:25   作者:你要永遠(yuǎn)相信光z  
Java提供一套完整的I/О流體系,通過(guò)I/О流可以非常方便地訪(fǎng)問(wèn)磁盤(pán)中的文件,同樣Android 也支持I/O流方式來(lái)訪(fǎng)問(wèn)手機(jī)等移動(dòng)設(shè)備中的存儲(chǔ)文件。希望可以為大家提供幫助

文件存儲(chǔ)

文件存儲(chǔ)方式不受類(lèi)型限制,可以將一些數(shù)據(jù)直接以文件的形式保存在設(shè)備中,例如文本文件、PDF ,音頻,圖片等。存儲(chǔ)類(lèi)型復(fù)雜的數(shù)據(jù)時(shí),通常采用文件存儲(chǔ)。Java提供一套完整的I/О流體系,通過(guò)I/О流可以非常方便地訪(fǎng)問(wèn)磁盤(pán)中的文件,同樣Android 也支持I/O流方式來(lái)訪(fǎng)問(wèn)手機(jī)等移動(dòng)設(shè)備中的存儲(chǔ)文件。

I/0流操作文件

進(jìn)行I/О流操作文件時(shí),需要先獲得文件的輸人流和輸出流。在Android應(yīng)用程序中,可以通過(guò)上下文環(huán)境Context對(duì)象提供的openFileInput()和 openFileOuput()兩個(gè)方法分別來(lái)獲得文件的輸入流和輸出流,這兩個(gè)方法的具體介紹如下。

  • FilelnputStream openFileInput(String name): 用于獲取應(yīng)用程序的數(shù)據(jù)文件夾下指定name文件名的標(biāo)準(zhǔn)文件輸入流,以便讀取設(shè)備中的文件。
  • FileOutputStream openFileOuput(String name, int mode): 用于獲取應(yīng)用程序的數(shù)據(jù)文件夾下指定name文件名的標(biāo)準(zhǔn)文件輸出流,以便將數(shù)據(jù)寫(xiě)入設(shè)備的文件中。

其中 openFileOutput()方法的第二個(gè)參數(shù)mode用于指定輸出流的模式,即打開(kāi)文件進(jìn)行操作的模式。Context類(lèi)中提供了4個(gè)靜態(tài)常量用于表示不同的輸出模式,如下表所示。

4種文件讀寫(xiě)模式

模式 功能描述
Context.MODE_PRIVATE 私有模式,該模式所創(chuàng)建的文件都是私有文件,只能被應(yīng)用本身所訪(fǎng)問(wèn)。因此,該模式下所寫(xiě)入的內(nèi)容會(huì)覆蓋原來(lái)文件的內(nèi)容
Context. MODE_APPEND 附加模式,該模式首先會(huì)檢查文件是否存在,若文件不存在,則創(chuàng)建新文件;若文件存在,則在原文件的末尾追加內(nèi)容
Context.MODE_WORLD_READABLE 可讀模式,該模式的文件可以被其他應(yīng)用程序讀取
Context.MODE_WORLD_WRITABLE 可寫(xiě)模式,該模式的文件可以被其他應(yīng)用程序讀寫(xiě)

除此之外,Context上下文對(duì)象還提供了一些方法來(lái)訪(fǎng)問(wèn)應(yīng)用程序的數(shù)據(jù)文件夾,如下表所示。

訪(fǎng)問(wèn)數(shù)據(jù)文件夾的方法

方法 功能描述
File getDir(String name, int mode) 在應(yīng)用程序的數(shù)據(jù)文件夾下獲取或創(chuàng)建name對(duì)應(yīng)的子目錄
File getFilesDir() 獲取應(yīng)用程序的數(shù)據(jù)文件夾的絕對(duì)路徑
String[] fileList() 返回應(yīng)用程序的數(shù)據(jù)文件夾下的所有文件
boolean deleteFile( String name) 刪除應(yīng)用程序的數(shù)據(jù)文件夾下的指定文件

下面通過(guò)代碼演示如何使用I/O流對(duì)文件進(jìn)行讀寫(xiě)操作

創(chuàng)建xml布局文件

在這里插入圖片描述

在這里插入圖片描述

xml布局代碼如下

<?xml version="1.0" encoding="utf-8"?>
<!-- 線(xiàn)性布局,寬度高度適應(yīng)屏幕變化,水平方向垂直 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <!-- 編輯輸入框,寬度適應(yīng)線(xiàn)性布局變化,高度適應(yīng)自己,設(shè)置顯示行數(shù)為四行 -->
    <EditText
        android:id="@+id/ediFileOut"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:lines="4"/>
    <!-- 保存文件按鈕,寬度,高度適應(yīng)自己,按鈕文本顯示-->
    <Button
        android:id="@+id/btnWrite"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="保存文件"/>
    <!-- 編輯顯示框,寬度適應(yīng)線(xiàn)性布局變化,高度適應(yīng)自己,設(shè)置光標(biāo)不可見(jiàn),不可編輯,行數(shù)為4-->
    <EditText
        android:id="@+id/editFileIn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:cursorVisible="false"
        android:editable="false"
        android:lines="4"/>
    <!-- 讀取文件按鈕寬度,高度適應(yīng)自己,按鈕文本顯示-->
    <Button
        android:id="@+id/btnRead"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="讀取文件"/>
</LinearLayout>

上述界面布局比較簡(jiǎn)單,只包含兩個(gè)文本框和兩個(gè)按鈕,分別用于保存文件和讀取文件兩種操作。

接著創(chuàng)建Activity程序

在這里插入圖片描述

在這里插入圖片描述

activity代碼如下

package com.example.wenjiancuncu;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.PrintStream;
public class FileIOActivity extends AppCompatActivity {
    private EditText editFileIn, editFileOut; //聲明兩個(gè)文本框
    private Button btnRead, btnWrite; //聲明兩個(gè)按鈕
    final String FILE_NAME = "qstIO.txt"; //指定文件名
    @Override //重寫(xiě)父類(lèi)方法
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); //調(diào)用父類(lèi)方法
        setContentView(R.layout.activity_file_io); //設(shè)置布局
        //獲取兩個(gè)文本框
        editFileIn = (EditText) findViewById(R.id.editFileIn);
        editFileOut = (EditText) findViewById(R.id.ediFileOut);
        //獲取兩個(gè)按鈕
        Button btnRead = (Button) findViewById(R.id.btnRead);
        Button btnWrite = (Button) findViewById(R.id.btnWrite);
        //以匿名類(lèi)的形式設(shè)置btnRead按鈕的事件監(jiān)聽(tīng)器
        btnRead.setOnClickListener(new View.OnClickListener() {
            @Override //重寫(xiě)接口方法
            public void onClick(View v) {
                //讀取指定文件中的內(nèi)容,并在editFileIn文本框中顯示出來(lái)
                editFileIn.setText(read());
            }
        });
        //以匿名類(lèi)的形式設(shè)置btnWrite按鈕的事件監(jiān)聽(tīng)器
        btnWrite.setOnClickListener(new View.OnClickListener() {
            @Override //重寫(xiě)接口方法
            public void onClick(View v) {
                write(editFileOut.getText().toString()); //將editFileOut中的內(nèi)容寫(xiě)入文件中
                editFileOut.setText(""); //清空editFileOut文本框中的內(nèi)容
            }
        });
    }
    private String read() {
        try {
            FileInputStream fis = openFileInput(FILE_NAME); //打開(kāi)文件輸入流
            byte[] buff = new byte[1024]; //定義一個(gè)字節(jié)緩存數(shù)組
            int hasRead = 0;
            StringBuilder sb = new StringBuilder(""); //創(chuàng)建可變字符串
            //讀取文件內(nèi)容
            while ((hasRead = fis.read(buff)) > 0) {
                //把字節(jié)數(shù)組轉(zhuǎn)化為字符串并添加到可變字符串中
                sb.append(new String(buff, 0, hasRead));
            }
            fis.close(); //關(guān)閉文件輸入流
            return sb.toString(); //返回一個(gè)字符串
        }catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    private void write(String content) {
        try {
            //以追加模式打開(kāi)文件輸出流
            FileOutputStream fos = openFileOutput(FILE_NAME, Context.MODE_APPEND);
            PrintStream ps = new PrintStream(fos); //將FileOutStream包裝成PrintStream
            ps.println(content); //輸出文件內(nèi)容
            ps.close(); //關(guān)閉文件輸出流
            //使用Toast顯示保存成功
            Toast.makeText(FileIOActivity.this,"保存成功", Toast.LENGTH_LONG).show();
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上述代碼的核心操作就是文件的保存和讀取,其中read()和 write()兩個(gè)方法分別用于讀文件和寫(xiě)文件操作;代碼中分別對(duì)btnRead 和 btnWrite按鈕設(shè)置了事件監(jiān)聽(tīng)器,并在事件處理方法中調(diào)用相應(yīng)的read()或write()方法實(shí)現(xiàn)文件的讀取或保存。

在AndroidMainfest中聲明Activity

在這里插入圖片描述

運(yùn)行結(jié)果

在這里插入圖片描述

Android應(yīng)用程序的數(shù)據(jù)文件默認(rèn)保存在/data/data/包名/files目錄下。在 AndroidDevice Monitor的 File Explorer選項(xiàng)卡中,展開(kāi)/data/data/com. 包名/files目錄,在該目錄下可以看到保存的qstIO.txt 數(shù)據(jù)文件,如下圖所示。

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

總結(jié)

這篇關(guān)于微信demo的文章就到這里了,希望大家可以多多關(guān)注腳本之家的更多精彩內(nèi)容!

相關(guān)文章

  • Android 簡(jiǎn)易手勢(shì)密碼開(kāi)源庫(kù)詳解

    Android 簡(jiǎn)易手勢(shì)密碼開(kāi)源庫(kù)詳解

    本文主要介紹Android 簡(jiǎn)易手勢(shì)密碼,這里主要介紹手勢(shì)密碼如何實(shí)現(xiàn)及簡(jiǎn)單的示例代碼,有需要的同學(xué)可以參考下
    2016-08-08
  • Android使用RadioGroup實(shí)現(xiàn)底部導(dǎo)航欄

    Android使用RadioGroup實(shí)現(xiàn)底部導(dǎo)航欄

    這篇文章主要為大家詳細(xì)介紹了Android使用RadioGroup實(shí)現(xiàn)底部導(dǎo)航欄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 詳解如何使用VisualStudio高效開(kāi)發(fā)調(diào)試AndroidNDK

    詳解如何使用VisualStudio高效開(kāi)發(fā)調(diào)試AndroidNDK

    這篇文章主要介紹了詳解如何使用VisualStudio高效開(kāi)發(fā)調(diào)試AndroidNDK,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • android使用videoview播放視頻

    android使用videoview播放視頻

    這篇文章主要介紹了Android利用自帶VideoView控件播放視頻的示例,需要的朋友可以參考下
    2014-02-02
  • Android開(kāi)發(fā)Jetpack組件LiveData使用講解

    Android開(kāi)發(fā)Jetpack組件LiveData使用講解

    LiveData是Jetpack組件的一部分,更多的時(shí)候是搭配ViewModel來(lái)使用,相對(duì)于Observable,LiveData的最大優(yōu)勢(shì)是其具有生命感知的,換句話(huà)說(shuō),LiveData可以保證只有在組件( Activity、Fragment、Service)處于活動(dòng)生命周期狀態(tài)的時(shí)候才會(huì)更新數(shù)據(jù)
    2022-08-08
  • Android用SharedPreferences實(shí)現(xiàn)登錄注冊(cè)注銷(xiāo)功能

    Android用SharedPreferences實(shí)現(xiàn)登錄注冊(cè)注銷(xiāo)功能

    這篇文章主要為大家詳細(xì)介紹了Android用SharedPreferences實(shí)現(xiàn)登錄注冊(cè)注銷(xiāo)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Android繪圖常用方法匯總

    Android繪圖常用方法匯總

    這篇文章主要為大家總結(jié)了Android繪圖的常用方法,具有一定的參考價(jià)值,感興趣的朋友可以參考一下
    2016-05-05
  • Android實(shí)戰(zhàn)教程第八篇之短信備份

    Android實(shí)戰(zhàn)教程第八篇之短信備份

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)戰(zhàn)教程第八篇之短信備份的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • android端使用openCV實(shí)現(xiàn)車(chē)牌檢測(cè)

    android端使用openCV實(shí)現(xiàn)車(chē)牌檢測(cè)

    這篇文章主要為大家詳細(xì)介紹了android端使用openCV實(shí)現(xiàn)車(chē)牌檢測(cè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Android利用ShaderMask實(shí)現(xiàn)花里胡哨的文字特效

    Android利用ShaderMask實(shí)現(xiàn)花里胡哨的文字特效

    我們的?App?大部分時(shí)候的文字都是一種顏色,實(shí)際上,文字的顏色也可以多姿多彩。我們今天就來(lái)介紹一個(gè)能夠輕松實(shí)現(xiàn)文字漸變色的組件?——?ShaderMask,感興趣的可以了解一下
    2022-12-12

最新評(píng)論