io流的简单使用之读写文件

在安卓项目中有时会涉及到文件内容的读取,比如说离线数据,在没有网络的时候,需要保存好一些数据,在有网络的时候在上传,除了使用数据库外,也可以使用文件的读写。闲话少说,直接代码:

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 java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;

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 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);
    }

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

    //测试io流
    public void WriteFile(String info) {
        File root = Environment.getExternalStorageDirectory();
        File file = new File(root, sFileName);
        try {
            FileWriter Writer = new FileWriter(file);
            Writer.write(info);
            Writer.flush();
            Writer.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();
        }
    }
}

xml:

<?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">

    <Button
        android:id="@+id/ceshi"
        android:text="写入数据"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginTop="30dp" />

    <Button
        android:text="读取数据"
        android:id="@+id/ceshi1"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginTop="30dp" />
</LinearLayout>
权限:
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 读取扩展卡 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
发布了95 篇原创文章 · 获赞 17 · 访问量 6万+

猜你喜欢

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