Data Storage(数据存储)之内部储存(Internal Storage)

Data Storage(数据存储)之内部储存(Internal Storage)

读取手机内部储存,Activity 中调用 openFileOutput(file_name, mode)方法返回File 对象;

file_name: 文件名

mode: 操作文件的类型

Context.MODE_PRIVATE:代表文件是私有的,如果重新调用,则原来的数据会被覆盖
Context.MODE_APPEND:先判断文件是否存在,如果存在,则在在原来的数据后面追加内容 />
Context.MODE_WORLD_READABLE:其他应用程序由权限读取
Context.MODE_WORLD_WRITEABLE:其他应用程序由权限写入

如果当其他程序同时具有读写功能,则应该这样写:

openFileOutput(FILE_NAME, Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);

下面是个小Demo:

public void writeFile(View view) {
    try {
        FileOutputStream fos = openFileOutput(FILE_NAME, Context.MODE_PRIVATE);
        fos.write(string_01.getBytes());

        fos.close();
        Toast.makeText(InternalStorageActivity.this, "Saved...", Toast.LENGTH_LONG).show();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

读取或者写入文件,默认目录是:/data/data/<package-name>/files/ 文件夹下
我们也可以使用Activity 提供的getCacheDir()getFilesDir() 方法:获取/data/data/<package-name>/ 下的 /cache/files

读取文件则调用openFileInput(FILE_NAME) 方法

public void readFile(View view) {
    try {
        FileInputStream fis = openFileInput(FILE_NAME);

        BufferedReader br = new BufferedReader(new InputStreamReader(fis));
    
        String line = null;
        while ((line = br.readLine()) != null) {
    
            String str = new String(line);
    
            Log.i(TAG, str);
        }
        Toast.makeText(InternalStorageActivity.this, "Read...", Toast.LENGTH_LONG).show();
    
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

操作外部储存(内存卡)

由于Android 系统内存大小的局限,比如我们储存文件就要把它放在外部存储中,在操作之前,我们要在AndroidManifest.xml 中设置读写操作:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 、、、、
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> 

操作外部储存(内存卡)

由于Android 系统内存大小的局限,比如我们储存文件就要把它放在外部存储中,在操作之前,我们要在AndroidManifest.xml 中设置
读写权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

创建和删除权限

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> 

Android 中的Environment 类对外部存储卡的操作,
getExternalStorageState() 方法,判断外部储存卡的状态,如果为MEDIA_MOUNTED 则表示可操作
getExternalStorageDirectory() 方法,获取外部储存的目录,可以对其目录进行操作

/**
    *  读取外部储存卡 
    *  在外部储存卡上创建一个demo.tet 文件,并写入字符
    *  为了沿着文件已经写入外部储存,所有读取创建的文件
    */
    public void getExternalStorage(View view) throws IOException {
    
    // Android 中的Environment 类对外部存储卡的操作,
    // getExternalStorageState() 方法,判断外部储存卡的状态,如果为MEDIA_MOUNTED 则表示可操作
    //getExternalStorageDirectory() 方法,获取外部储存的目录,可以对其目录进行操作
    String state =  Environment.getExternalStorageState();
    
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        File sdcardDir = Environment.getExternalStorageDirectory();
        File saveFile = new File(sdcardDir, "demo.text");
    
        FileOutputStream fos = new FileOutputStream(saveFile);
        fos.write("text".getBytes());
        fos.close();
        Toast.makeText(InternalStorageActivity.this, "getExternalStorage", Toast.LENGTH_LONG).show();

        File[] fileDir = sdcardDir.listFiles();
        for (File file : fileDir) {
            String fileName = file.toString();
            Log.i(TAG, "FileName: " + fileName);
        }

        FileInputStream fis = new FileInputStream(saveFile);
        byte[] buffer = new byte[1024];
        int len = 0;
        String value = null;
        while ((len = fis.read(buffer)) != -1) {
            value = new String(buffer, 0, len);

        }
        fis.close();
        Log.i(TAG, "getValue = " + value);

    }
}

转载于:https://www.cnblogs.com/Tikitoo/p/android-data-internal-storage.html