io流的简单使用之读写文件2存储读取list

上篇只是简单的介绍如何存取数据,有时候需要存储一个很多数据的集合,那么改如何操作哪?直接代码

基本配置和上篇的一样只是在activity里更改了两个方法而已

package dayin.com.myapplication.io;

import android.app.Activity;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Environment;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

import dayin.com.myapplication.R;

/**
 * Created by lake
 * 此类的功能:读写文件的测试
 */
public class IOActivity extends AppCompatActivity implements View.OnClickListener {
    private Button ceshi;
    private Button ceshi1;
    final String sFileName = "lake.txt";//创建的文件的名字


    //原始数据
    private ArrayList<String> list = new ArrayList<>();

    //读取数据后存放的集合
    private ArrayList<String> getlist = new ArrayList<>();


    private static final int REQUEST_EXTERNAL_STORAGE = 1;
    private static String[] PERMISSIONS_STORAGE = {
            "android.permission.READ_EXTERNAL_STORAGE",
            "android.permission.WRITE_EXTERNAL_STORAGE"};

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ioativity);
        verifyStoragePermissions(this);
        ceshi = findViewById(R.id.ceshi);
        ceshi1 = findViewById(R.id.ceshi1);
        ceshi.setOnClickListener(this);
        ceshi1.setOnClickListener(this);

        list.add("数据1");
        list.add("数据2");
        list.add("数据3");
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.ceshi:
                WriteFile();
                break;
            case R.id.ceshi1:
                ReadMsgLine();
//                Log.e("ioceshi11", "onClick: " + ReadMsg());
                break;
        }
    }

    //读取信息
    private void ReadMsgLine() {
        File root = Environment.getExternalStorageDirectory();
        File file = new File(root, "lake45.txt");
        try {
            if (file.exists()) {
                BufferedReader br = new BufferedReader(new FileReader(file));
                String line = null;
                while ((line = br.readLine()) != null) {
                    getlist.add(line);
                }

                br.close();

                for (int i = 0; i < getlist.size(); i++) {
                    Log.e("输出得到的字符", "ReadMsgLine: " + getlist.get(i));
                }
            } else {
                Toast.makeText(this, "文件不存在", Toast.LENGTH_LONG).show();
            }


        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    //测试io流
    public void WriteFile() {
        File root = Environment.getExternalStorageDirectory();
        File file = new File(root, "lake45.txt");
        try {
            BufferedWriter bw = new BufferedWriter(new FileWriter(file));
            for (int i = 0; i < list.size(); i++) {
                String str = list.get(i);
                bw.write(str);
                bw.newLine();
            }

            bw.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    public String ReadMsg() {
        String content = null;
        File root = Environment.getExternalStorageDirectory();
        File file = new File(root, sFileName);
        try {
            if (file.exists()) {
                FileInputStream fis = new FileInputStream(file);
                byte[] buffer = new byte[1024];
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                int len = 0;
                while ((len = fis.read(buffer)) != -1) {
                    baos.write(buffer, 0, len);
                }
                byte[] data = baos.toByteArray();
                baos.close();
                fis.close();//记得关闭
                content = new String(data);
            }
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        return content;
    }

    //判断是否存在读取的文件
    public boolean isFileExist() {
        File file = new File(Environment.getExternalStorageDirectory() + "/" + sFileName);
        return file.exists();
    }

    //删除文件
    public boolean delFile() {
        File file = new File(Environment.getExternalStorageDirectory() + "/" + sFileName);
        return file.delete();
    }


    //6.0以后动态获取读取sd卡的权限,这里只是简单的写一下,用的时候可以在优化。
    public static void verifyStoragePermissions(Activity activity) {

        try {
            //检测是否有写的权限
            int permission = ActivityCompat.checkSelfPermission(activity,
                    "android.permission.WRITE_EXTERNAL_STORAGE");
            if (permission != PackageManager.PERMISSION_GRANTED) {
                // 没有写的权限,去申请写的权限,会弹出对话框
                ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

发布了95 篇原创文章 · 获赞 17 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_30299243/article/details/95864847