Android APP 包下的读写文件

Android 中的文件读写和 Java 中的文件 I/O 相同,流程也很简单

范例

我们写一个 demo 尝试在当前包下创建文件 site.txt 并写入以下内容

简单教程,简单编程
  1. 创建一个 空的 Android 项目 cn.twle.android.WriteFile

  2. 修改 activity_main.xml 添加几个 TextView

    <?xml version="1.0" encoding="UTF-8" ?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:hint="请输入文件名"/>
    
        <EditText
            android:id="@+id/ms_filename"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="文件名"
            android:text="site.txt"/>
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="请输入文件内容" />
    
        <EditText
            android:id="@+id/ms_filedata"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="简单教程,简单编程"
            android:hint="文件内容" />
    
        <Button
            android:id="@+id/btn_save"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="保存" />
    
        <Button
            android:id="@+id/btn_clean"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="清空" />
    
        <Button
            android:id="@+id/btn_read"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="读取文件" />
    
    </LinearLayout>
    
  3. MainActivity.java 同一目录下新建文件 FileHelper.java 作为读写 SD 卡的帮助类

    package cn.twle.android.writefile;
    
    import android.content.Context;
    
    import java.io.IOException;
    import java.io.FileOutputStream;
    import java.io.FileInputStream;
    
    public class FileHelper {
    
        private Context mContext;
    
        public FileHelper() {
        }
    
        public FileHelper(Context mContext) {
            super();
            this.mContext = mContext;
        }
    
        /*
        * 这里定义的是一个文件保存的方法,写入到文件中,所以是输出流
        * */
        public void save(String filename, String filecontent) throws Exception {
            //这里我们使用私有模式,创建出来的文件只能被本应用访问,还会覆盖原文件哦
            FileOutputStream output = mContext.openFileOutput(filename, Context.MODE_PRIVATE);
            output.write(filecontent.getBytes());  //String字符串以字节流的形式写入到输出流中
            output.close();         //关闭输出流
        }
    
        /*
        * 这里定义的是文件读取的方法
        * */
        public String read(String filename) throws IOException {
            //打开文件输入流
            FileInputStream input = mContext.openFileInput(filename);
            byte[] temp = new byte[1024];
            StringBuilder sb = new StringBuilder("");
            int len = 0;
            //读取文件内容:
            while ((len = input.read(temp)) > 0) {
                sb.append(new String(temp, 0, len));
            }
            //关闭输入流
            input.close();
            return sb.toString();
        }
    
    }
    
  4. 最后修改 MainActivity.java ,我们在这里完成相关操作

    package cn.twle.android.writefile;
    
    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.IOException;
    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    
        private EditText ms_filename;
        private EditText ms_filedata;
        private Button btn_save;
        private Button btn_clean;
        private Button btn_read;
    
        private FileHelper helper;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            helper = new FileHelper(getApplicationContext());
            bindViews();
        }
    
        private void bindViews() {
    
            ms_filename = (EditText) findViewById(R.id.ms_filename);
            ms_filedata = (EditText) findViewById(R.id.ms_filedata);
            btn_save = (Button) findViewById(R.id.btn_save);
            btn_clean = (Button) findViewById(R.id.btn_clean);
            btn_read = (Button) findViewById(R.id.btn_read);
    
            btn_save.setOnClickListener(this);
            btn_clean.setOnClickListener(this);
            btn_read.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.btn_clean:
                    ms_filename.setText("");
                    ms_filedata.setText("");
                    break;
                case R.id.btn_save:
                    String filename = ms_filename.getText().toString();
                    String filedetail = ms_filedata.getText().toString();
                    try
                    {
                        helper.save(filename, filedetail);
                        Toast.makeText(getApplicationContext(), "数据写入成功", Toast.LENGTH_SHORT).show();
                    }
                    catch(Exception e){
                        e.printStackTrace();
                        Toast.makeText(getApplicationContext(), "数据写入失败", Toast.LENGTH_SHORT).show();
                    }
                    break;
                case R.id.btn_read:
                    String detail = "";
                    try
                    {
                        String filename2 = ms_filename.getText().toString();
    
                        detail = helper.read(filename2);
                    }
                    catch(IOException e){e.printStackTrace();}
                    Toast.makeText(getApplicationContext(), detail, Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    }
    

运行 APP ,演示效果如下


DDMS 查看手机上的文件

DDMS 全名 Dalvik Debug Monitor Service,是 Android 开发环境中的 Dalvik 虚拟机调试监控服务

  1. 在最新的 Android Studio 3 中,DDMS 已经是顶级窗口之一了,一般会收缩在编辑器的右下角

  2. 单击 Device File Explore 就会展开当前设备根目录下的所有文件和目录

  3. 依次展开 data/data/cn.twle.android.writefile/file 的目录

    就会看到我们刚刚创建的文件 site.txt

  4. 双击打开 site.txt,如果是一般的文件,直接双击文件名就会打开

果然,读写文件成功

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.