溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

android I/0流操作文件的方法

發(fā)布時(shí)間:2021-06-18 09:06:14 來(lái)源:億速云 閱讀:175 作者:chen 欄目:開(kāi)發(fā)技術(shù)

本篇內(nèi)容主要講解“android I/0流操作文件的方法”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“android I/0流操作文件的方法”吧!

目錄
  • 文件存儲(chǔ)

    • I/0流操作文件

  • 總結(jié)

    文件存儲(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布局文件

    android I/0流操作文件的方法

    android I/0流操作文件的方法

    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程序

    android I/0流操作文件的方法

    android I/0流操作文件的方法

    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

    android I/0流操作文件的方法

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

    android I/0流操作文件的方法

    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ù)文件,如下圖所示。

    android I/0流操作文件的方法

    android I/0流操作文件的方法

    android I/0流操作文件的方法

    到此,相信大家對(duì)“android I/0流操作文件的方法”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

    向AI問(wèn)一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI