安卓开发之在internal存储区中存取文件和外部存储区存放文件

举报
南蓬幽 发表于 2022/08/29 11:42:16 2022/08/29
【摘要】 输入文件名和文件内容分别在internal存储区中存取文件和外部存储区存放文件 样式布局 activity_saveinfile.xml saveinfile 实验结果 internal存储区中存取文件 外部存储区存放文件 输入文件名和文件内容分别在internal存储区中存取文件和外部存储区存放文件所有的Android设备有两个物理存储区域:“internal” 和"external"。...

输入文件名和文件内容分别在internal存储区中存取文件和外部存储区存放文件

所有的Android设备有两个物理存储区域:“internal” 和"external"。这些名字来自于Android早期,那时大部分设备提供内置的非易失内存(internal存储),再加一个可移除的存储媒介,如SD卡(external存储)。

样式布局

activity_saveinfile.xml

在这里插入图片描述

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="30dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="文件名字:"
            android:layout_marginLeft="20dp"
            android:textSize="20dp"></TextView>
        <EditText
            android:id="@+id/et_filename"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginRight="20dp"
            android:layout_marginLeft="80dp"
            android:textSize="20dp"></EditText>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:text="文件内容:"
            android:textSize="20dp"></TextView>
        <EditText
            android:id="@+id/et_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginRight="20dp"
            android:layout_marginLeft="80dp"
            android:textSize="20dp"></EditText>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp">

        <Button
            android:id="@+id/btn_saveInternal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_marginLeft="20dp"
            android:text="存入INTERNAL文件"
            android:textColor="#020202"
            android:textSize="15dp"
            app:backgroundTint="#CFCECE"></Button>

        <Button
            android:id="@+id/btn_saveExternal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:layout_weight="1"
            android:text="存入EXTWRNAL文件"
            android:textColor="#020202"
            android:textSize="15dp"
            app:backgroundTint="#CFCECE"></Button>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Internal文件内容:"
            android:layout_marginLeft="20dp"
            android:textSize="20dp"></TextView>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="20dp"
            android:layout_marginLeft="20dp"
            android:id="@+id/tv_showInternalContent"
            android:textSize="20dp"></TextView>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="60dp">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:text="External文件内容:"
            android:textSize="20dp"></TextView>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="20dp"
            android:layout_marginLeft="20dp"
            android:id="@+id/tv_showExternalContent"
            android:textSize="20dp"></TextView>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp">

        <Button
            android:id="@+id/btn_getInternal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_marginLeft="20dp"
            android:text="从INTERNA取L文件"
            android:textSize="15dp"
            android:textColor="#020202"
            app:backgroundTint="#CFCECE"></Button>

        <Button
            android:id="@+id/btn_getExternal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_marginRight="20dp"
            android:layout_marginLeft="20dp"
            android:text="从EXTWRNAL取文件"
            android:textColor="#020202"
            android:textSize="15dp"
            app:backgroundTint="#CFCECE"></Button>
    </LinearLayout>
</LinearLayout>

saveinfile

文件的存储和取出

package com.example.myapplication4;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class SaveInFile extends AppCompatActivity implements View.OnClickListener {
    private EditText et_name;
    private EditText et_content;
    private TextView tv_in_content;
    private TextView tv_ex_content;



    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_saveinfile);
        et_name = (EditText) findViewById(R.id.et_filename);
        et_content = (EditText) findViewById(R.id.et_content);
        tv_in_content = (TextView) findViewById(R.id.tv_showInternalContent);
        tv_ex_content = (TextView) findViewById(R.id.tv_showExternalContent);
        findViewById(R.id.btn_saveInternal).setOnClickListener(this);
        findViewById(R.id.btn_saveExternal).setOnClickListener(this);
        findViewById(R.id.btn_getInternal).setOnClickListener(this);
        findViewById(R.id.btn_getExternal).setOnClickListener(this);



    }

    public boolean isExternalStorageWritable() {
        if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
            return true;
        }
        return false;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_saveInternal:
                FileOutputStream fos;
                try {
                    fos = openFileOutput(et_name.getText().toString().trim(), Context.MODE_PRIVATE);
                    fos.write(et_content.getText().toString().trim().getBytes());
                    fos.close();
                    Toast.makeText(this, "存入内部成功", Toast.LENGTH_SHORT).show();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                break;
            case R.id.btn_saveExternal:
                if (isExternalStorageWritable()) {
                    File file = new File(Environment.getExternalStorageDirectory(), et_name.getText().toString().trim() + ".txt");
                    fos = null;
                    try {
                        fos = new FileOutputStream(file);
                        fos.write(et_content.getText().toString().trim().getBytes());
                        Toast.makeText(this, "创建成功", Toast.LENGTH_SHORT).show();
                    } catch (FileNotFoundException e) {
                        Toast.makeText(this, "请允许\"SavelInFile\"访问您设备上的照片、\n" +
                                "媒体内容和文件\n", Toast.LENGTH_LONG).show();
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                } else {
                    Toast.makeText(this, "外部存储区不可用", Toast.LENGTH_SHORT).show();
                }
                break;


            case R.id.btn_getInternal:
                FileInputStream fis;
                try {
                    fis = openFileInput(et_name.getText().toString().trim());
                    byte[] buffer = new byte[fis.available()];
                    fis.read(buffer);
                    tv_in_content.setText(getFilesDir() + "/" + et_name.getText().toString().trim() + ".txt" + ":" + new String(buffer));
                    fis.close();
                    Toast.makeText(this, "从内部读取成功", Toast.LENGTH_SHORT).show();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                break;

            case R.id.btn_getExternal:
                File file = new File(Environment.getExternalStorageDirectory(), et_name.getText().toString().trim() + ".txt");
                try {
                    fis = new FileInputStream(file);
                    byte[] buffer = new byte[fis.available()];
                    fis.read(buffer);
                    tv_ex_content.setText(Environment.getExternalStorageDirectory().getPath() + "/" + et_name.getText().toString().trim() + ".txt" + ":" + new String(buffer));
                    Toast.makeText(this, "从外部读取成功", Toast.LENGTH_SHORT).show();
                    fis.close();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                break;

        }

    }


}

实验结果

internal存储区中存取文件

在这里插入图片描述

外部存储区存放文件

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。