Android數據存儲(internal,external)

數據存儲

在這裏插入圖片描述
MainActivity.java

package com.example.saveinfile;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class MainActivity extends AppCompatActivity {

    EditText et_fileName;
    EditText et_fileContext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }



    //內部存儲
    public void Button_SaveInterOnclick(View view){
        et_fileName = (EditText) findViewById(R.id.ET_FileName);
        et_fileContext = (EditText) findViewById(R.id.ET_FileContext);
        //要保存的信息所在的文件名
        // trim() 方法用於刪除字符串的頭尾空白符。
        String saveFileName = et_fileName.getText().toString().trim();
        //要保存的內容
        String saveFileContext = et_fileContext.getText().toString().trim();

        //準備保存信息 輸出流用於寫入內容
        FileOutputStream outputStream = null;

        try {
            //打開文件
            outputStream = openFileOutput(saveFileName, Context.MODE_PRIVATE);
            //寫入信息
            outputStream.write(saveFileContext.getBytes());
            //關閉流
            outputStream.close();

            Toast.makeText(MainActivity.this,"寫入internal成功",Toast.LENGTH_SHORT).show();
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(MainActivity.this,"寫入internal失敗",Toast.LENGTH_SHORT).show();
        }
    }

    //內部讀取
    public void Button_ReadExterOnlick(View view){
        TextView ShowInterContext = findViewById(R.id.InterContext);
        et_fileName = (EditText) findViewById(R.id.ET_FileName);
        et_fileContext = (EditText) findViewById(R.id.ET_FileContext);
        String readFileName = et_fileName.getText().toString().trim();
        //寫入流  可以用於讀取數據
        FileInputStream inputStream = null;
        try{
            //打開文件
            inputStream = openFileInput(readFileName);
            //準備存放打開的文件
            byte[] context = new byte[inputStream.available()];
            //把流讀入字節數據裏面
            inputStream.read(context);
            String stringContext = new String(context);
            ShowInterContext.setText( getDir(readFileName,MODE_PRIVATE)+":"+stringContext);
            //把流進行關閉
            inputStream.close();
        }
        catch (Exception e ){
        }
    }
    public boolean isExternalStorageWritable() {
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state)) {
            return true;
        }
        return false;
    }

    /* Checks if external storage is available to at least read */
    public boolean isExternalStorageReadable() {
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state) ||
                Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
            return true;
        }
        return false;
    }

    //在指定文件目錄下創建一個文件夾
    public File getExternalDir(String DirName){
        File createDir = Environment.getExternalStoragePublicDirectory(DirName);
        if(!createDir.mkdir()){
            Log.d("","CreateFail");
        }
        return createDir;
    }

    //外部存儲
    public void Button_SaveExterOnlick(View view){
        // trim() 方法用於刪除字符串的頭尾空白符。
        String saveFileName = et_fileName.getText().toString().trim();
        //要保存的內容
        String saveFileContext = et_fileContext.getText().toString().trim();
        et_fileName = (EditText) findViewById(R.id.ET_FileName);
        et_fileContext = (EditText) findViewById(R.id.ET_FileContext);
        if(isExternalStorageReadable()){
            //在指定位置創建文件夾
            File createDir = getExternalDir("dir");
            //判斷文件夾是否創建成功
            if(createDir!=null){
                File file = new File(createDir,saveFileName);
                FileOutputStream outputStream = null;
                try{
                    //打開
                    outputStream = new FileOutputStream(file);
                    outputStream.write(saveFileContext.getBytes());
                    outputStream.close();
                    Toast.makeText(MainActivity.this,"寫入External成功",Toast.LENGTH_SHORT).show();
                }catch (Exception e){
                    e.printStackTrace();
                    Toast.makeText(MainActivity.this,"寫入External失敗",Toast.LENGTH_SHORT).show();
                }
            }
        }
    }

    //讀取外部
    public void Button_ReadExterOnclick(View view){
        TextView ShowExterContext = findViewById(R.id.ExterContext);
        //判斷一下外部的存儲的可用性,是否可以進行讀操作
        if(isExternalStorageWritable()){
            //獲取文件所在文件夾的位置
            File dirName = getExternalDir("dir");
            if(dirName!=null){
                //準備獲取讀取的文件內容
                //找到讀取的文件名字
                String readFileName = et_fileName.getText().toString().trim();
                File filePath = new File(dirName,readFileName);
                FileInputStream inputStream = null;
                try {
                    //將指定文件的完整路徑(包括文件),讀入到數據流中
                    inputStream = new FileInputStream(filePath);
                    //將數據流讀入到二進制數組中
                    byte [] context = new byte[inputStream.available()];
                    inputStream.read(context);
                    String fileContext = new String(context);
                    ShowExterContext.setText(filePath+":"+fileContext);
                }catch (Exception e){
                }
            }
        }
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingRight="15dp"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="66dp"
        android:paddingRight="15dp"
        android:orientation="horizontal">
        <TextView
            android:id="@+id/TV_FileNameLabel"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:gravity="center"
            android:textSize="26sp"
            android:text="文件名字 :"
            android:layout_height="match_parent"></TextView>
        <EditText
            android:id="@+id/ET_FileName"
            android:textSize="26sp"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent"></EditText>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="66dp"
        android:paddingRight="15dp"
        android:orientation="horizontal">
        <TextView
            android:id="@+id/TV_FileContextLabel"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:gravity="center"
            android:textSize="26sp"
            android:text="文件內容 :"
            android:layout_height="match_parent"></TextView>
        <EditText
            android:id="@+id/ET_FileContext"
            android:textSize="26sp"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent"></EditText>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="66dp"
        android:orientation="horizontal">

        <Button
            android:id="@+id/SaveInter"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:gravity="center"
            android:textSize="26sp"
            android:text="存入內部"
            android:onClick="Button_SaveInterOnclick"
            android:layout_height="match_parent"></Button>
        <Button
            android:id="@+id/SaveExter"
            android:textSize="26sp"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:onClick="Button_SaveExterOnlick"
            android:text="存入外部"
            android:layout_height="match_parent"></Button>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="66dp"
        android:orientation="horizontal">

        <Button
            android:id="@+id/ReadInter"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:text="讀取內部"
            android:onClick="Button_ReadExterOnlick"
            android:textSize="26sp"></Button>
        <Button
            android:id="@+id/ReadExter"
            android:textSize="26sp"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:onClick="Button_ReadExterOnclick"
            android:text="讀取外部"
            android:layout_height="match_parent"></Button>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:textSize="20sp"
            android:gravity="center"
            android:id="@+id/InterContextLabel"
            android:layout_weight="1"
            android:text="內部內容:"
            android:layout_width="match_parent"
            android:layout_height="match_parent"></TextView>
        <TextView
            android:textSize="20sp"
            android:gravity="center"
            android:id="@+id/InterContext"
            android:layout_weight="1"
            android:text="Hello!"
            android:layout_width="match_parent"
            android:layout_height="match_parent"></TextView>

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:textSize="20sp"
            android:gravity="center"
            android:id="@+id/ExterContextLabel"
            android:layout_weight="1"
            android:text="外部內容:"
            android:layout_width="match_parent"
            android:layout_height="match_parent"></TextView>
        <TextView
            android:textSize="20sp"
            android:gravity="center"
            android:id="@+id/ExterContext"
            android:layout_weight="1"
            android:text="Hello!"
            android:layout_width="match_parent"
            android:layout_height="match_parent"></TextView>

    </LinearLayout>
</LinearLayout>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章