文件存储之内部存储和外部存储

xml布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
      android:orientation="vertical"
      android:background="#ffffff"
    tools:context="com.example.android_file.MainActivity" >

   <EditText  
       android:id="@+id/edittext"
       android:layout_width="match_parent"
       android:layout_height="100dp"
       />
   <Button 
       android:id="@+id/button"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="写入并读取出来"/>
   <TextView 
       android:id="@+id/textview"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       />

</LinearLayout>

Main1.java

package com.example.android_file;

import java.io.File;
import java.io.IOException;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //如果想要在文件里面写入数据,需要加入读写数据的权限,不加会报错
        File file = new File("/mnt/sdcard/test");//安卓内置文件目录
        if(!file.exists()){
            try {
                file.createNewFile();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }else{
            Toast.makeText(MainActivity.this, "创建失败,文件已经存在", Toast.LENGTH_SHORT).show();
            
        }
        //删除文件
        //file.delete();
        File file1 = this.getFilesDir();//这个目录是当前应用程序默认的数据存储目录
        Log.i("info", file1.toString());
        File file2 = this.getCacheDir();//这个目录时当前应用程序默认的缓存文件的存放位置
        //把一些不是非常重要的文件在此处创建 使用
        //如果手机的内部不足的时候 系统会自动去删除APP的cache 目录的数据
        Log.i("info", file2.toString());
        // 获取/data/data/<包名>/example目录
        File file3 = this.getDir("example", MODE_PRIVATE);
        Log.i("info", file3.toString());
        //可以得到外部的存储位置,该位置的数据跟内置的使用是一样的,如果APP卸载了,该目录里面的数据也会自动清除
        //但是,如果开发者不遵守规则,不将数据放入 data/data/<包名>或者 /mnt/sdcard/Android/data/<包名>中
        //卸载之后,数据将不会自动清除掉 将会造成数据垃圾
        
        //this.getExternalFilesDir(type);
        //this.getExternalCacheDir();
    }
}

main2.java

package com.example.android_file;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class SecondActivity extends Activity  {
    private EditText editText;
    private TextView textView;
    private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = (EditText) findViewById(R.id.edittext);
        textView = (TextView) findViewById(R.id.textview);
        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            
            @Override//点击按钮触发读文件内容与写文件内容的操作
            public void onClick(View v) {
                // TODO Auto-generated method stub
                writeFile(editText.getText().toString());
                textView.setText(readFiles());
            }
        });
    }
    public void writeFile(String content){
        //文件权限:
        //当应用程序在安装时系统会分配给它一个userid,当该应用要去访问其他资源比如文件的时候就需要userid匹配,默认情况下,任何应用创建的文件都是私有的(位于/data/data/<package name>/files),其他程序无法访问
        //如果想程序其他应用可以访问该内容,可以将模式改成MODE_WORLD_READABLE+MODE_WORLD_WRITEABLE
        try {
            //创建一个文件写入内容,如果想将文件写入到内存卡,需要加入权限android:permission.WRITE.EXTERNAL_ATORAGE
            FileOutputStream fos = openFileOutput("user.txt", MODE_PRIVATE);
            fos.write(content.getBytes());
            fos.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public String readFiles(){
        String content = null;
        try {
            //读取内容
            FileInputStream fis = openFileInput("user.txt");
            ByteArrayOutputStream bos = new ByteArrayOutputStream();//内存流读取数据,并将数据由字节转成字符串
            byte[] buf = new byte[1024*1024];
            int len = 0;
            while((len = fis.read(buf))!=-1){
                bos.write(buf, 0, len);
            
            }
            content = bos.toString();
            fis.close();
            bos.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return content;
        
    }
}
原文地址:https://www.cnblogs.com/fangg/p/5723166.html