编程知识 cdmana.com

android基础-文件操作

常用方法

方法 释义
getFilesDir() 获取APP文件路径
getCacheDir() 获取APP临时文件路径

获取项目路径

package com.example.myapplication;
import android.content.Context;
import android.os.Bundle;
import android.app.Activity;

public class MainActivity extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // 保存Activity的状态  11
        super.onCreate(savedInstanceState);
        // 加载视图
        setContentView(R.layout.activity_main);

        // 运行获取路径函数,传入上下文 Context 对象
        String path = project_path(this);
        System.out.println("获取到的路径是:" + path);
    }
    // 自定义获取路径函数,参数为上下文 Context 对象
    public static String project_path(Context context) {
        // 通过 context 获取当前项目路径
        String path = context.getFilesDir().getPath();
        return path;
    }
}

APP存储和访问示例

AndroidManifest.xml

在这里在<uses-permission>标签中给APP所需权限进行授权,其中安卓9以上还需要在<application>中允许权限,比如 android:requestLegacyExternalStorage="true"

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication">
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<application android:allowBackup="true"
    android:label="@string/app_name"
    android:icon="@mipmap/ic_launcher"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@android:style/Theme.Wallpaper.NoTitleBar"
    android:requestLegacyExternalStorage="true"
    >
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
</manifest>

MainActivity.java

在这里进行主逻辑执行以及执行状态反馈

package com.example.myapplication;
import android.os.Bundle;
import android.app.Activity;
import android.os.Environment;

public class MainActivity extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // 保存Activity的状态
        super.onCreate(savedInstanceState);
        // 加载视图
        setContentView(R.layout.activity_main);
        // 获取项目路径
        String pro_path = File_Tool.project_path(this);

        // ###### 【文本写入】 ######
        // 示例文本
        String Str = "小狗在河边钓鱼";
        // 文本储存绝对路径
        String str_path = pro_path + "/字符串测试文本.txt";
        // 执行文本写入操作
        File_Tool.str_txt(Str,str_path);

        // ###### 【sd卡文本写入】 ######
        // 示例文本
        String Str2 = "小猫在草丛里抓蝴蝶";
        // 获取SD卡存储路径
        String sd_path = Environment.getExternalStorageDirectory()+"/";
        System.out.println("储存卡路径是:"+ sd_path);
        String wsd_path = sd_path + "123.txt";
        // 执行文本写入操作
        File_Tool.str_txt(Str2,wsd_path);


        // ###### 【数组存储】 ######
        // 示例数组
        String[] arr = {"小猫","小狗","小猪"};
        // 文本储存绝对路径
        String arr_path = pro_path + "/数组测试文本.txt";
        // 执行文本写入操作
        File_Tool.arr_txt(arr,arr_path);

        // 读取文件
        File_Tool.read_txt(str_path);
        File_Tool.read_txt(arr_path);
        File_Tool.read_txt(wsd_path);
    }
}

File_Tool.java

与MainActivity.java同级目录的自定义工具类,包含了主类需要调用的方法

package com.example.myapplication;
import android.content.Context;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;

public class File_Tool {
    /**
     * 文件工具类
     **/
    public static String project_path(Context context) {
        /**【获取路径】*/
        // 通过 context 获取当前项目路径
        String path = context.getFilesDir().getPath();
        return path;
    }

    public static Boolean str_txt(String str,String path){
        /**【文本写入到app内部存储】*/
        try {
            // 创建字节输出流对象
            OutputStream os = new FileOutputStream(path);
            os.write(str.getBytes());                       // 通过输出流输出数据到指定文档中( string 类型需要做转化)
            os.close();
            System.out.println("文本文件写入成功,路径是:" + path);
            return true;
        } catch (IOException e) {
            System.out.print("\n【文本写入到app内部存储】失败\n");
            return false;
        }
    }

    public static Boolean arr_txt(String[] arr, String path){
        /**【数组写入到txt】*/
        try {
            // 创建字节输出流对象
            OutputStream os = new FileOutputStream(path);
            // 遍历数组写入到文件中
            for(String i:arr){
                os.write(String.valueOf(i).getBytes());   // String 字符串类型需要做转化
            }
            os.close();
            System.out.println("数组文件写入成功,路径是:" + path);
            return true;
        } catch (IOException e) {
            System.out.print("\n【数组写入到txt】失败\n");
            return false;
        }
    }

    public static Boolean read_txt(String path){
        /**【读取文件内容】*/
        try {
            // 创建字节输入流对象
            InputStream is = new FileInputStream(path);
            // 转化为字符流对象
            InputStreamReader reader = new InputStreamReader(is,"UTF-8");
            // 创建 BufferedReader 缓冲字符流
            BufferedReader br = new BufferedReader(reader);

            // BufferedReader 缓冲字符流,得到字符
            String b;                                  // 定义变量记录每次读到的字节
            while (( b = br.readLine()) != null ){
                System.out.println("当前值是:" + b);
            }
            // 关闭资源文件,避免浪费服务器资源
            is.close();
            reader.close();
            br.close();
            return true;
        } catch (IOException e) {
            //当抛出多个异常时,子异常当在父异常前抛出。
            System.out.print("\n【读取文件内容】失败\n");
            return false;
        }
    }
}

版权声明
本文为[ZHAO_JH]所创,转载请带上原文链接,感谢
https://my.oschina.net/zhaojunhui/blog/4711710

Tags java
Scroll to Top