andriod 内存数据读取 写入操作(openFileInput,openFileOutput)

本文介绍了如何使用Android的openFileInput和openFileOutput方法进行内存数据的读取和写入,这两个方法用于访问/data/data/当前应用包名/files目录下的文件。详细讲解了Context.MODE_PRIVATE、Context.MODE_APPEND、Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE四种文件访问权限模式,并阐述了它们在文件操作中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        openFileOutput和openFileInput获取手机内存中的文件而不是SD卡中的。
  openFileInput(Stringname):直接得到/data/data/当前app包名/files/name文件的输入流
  openFileOutput(Stringname,intmode):直接得到/data/data/当前app包名/files/name文件的输出流,mode为写入文件时的权限
  1、Android数据访问权限实现方式
  Context类的publicabstractFileOutputStreamopenFileOutput(Stringname,intmode)

  2、其中mode就是文件访问权限模式,主要4种模式
  Context.MODE_PRIVATE:私有模式(默认模式),只能被应用本身和同一群组的人访问;写入的内容覆盖原文件内容
  Context.MODE_APPEND:追加模式也是私有模式,只能被应用本身和同一群组的人访问;如果文件存在就追加内容,如果文件不存在就新建文件并写入内容
  Context.MODE_WORLD_READABLE:所有人可读权限
  Context.MODE_WORLD_WRITEABLE:所有人可写权限
  也可通过多个组合同时拥有多个读写权限,Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE表示所有人可读+可写

public class MainActivity extends Activity {  
  
    private EditText et;  
    private Button saveButton, readButton;  
    private TextView show;  
      
      
    private boolean MyWrite() {  
        try {  
            FileOutputStream fos = openFileOutput("data",  
                    Context.MODE_WORLD_READABLE);  
  
            String content = et.getText().toString();  
            fos.write(content.getBytes());  
            fos.flush();  
            fos.close();  
            Toast.makeText(MainActivity.this, "成功", 1).show();  
            return true;  
        } catch (Exception e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
        return false;  
    }  
  
    private boolean MyRead() {  
        try {  
            FileInputStream fis = openFileInput("data");  
            byte buff[] = new byte[1024];  
            StringBuffer sb = new StringBuffer();  
            int hasread = 0;  
            while ((hasread = fis.read(buff)) != -1) {  
                sb.append(new String(buff));  
            }  
            fis.close();  
            show.setText(sb.toString());  
            Toast.makeText(MainActivity.this, sb.toString(), 1).show();  
            return true;  
        } catch (Exception e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
        return false;  
    }  
  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
  
        et = (EditText) findViewById(R.id.edittext);  
        saveButton = (Button) findViewById(R.id.save);  
        readButton = (Button) findViewById(R.id.red);  
        show = (TextView) findViewById(R.id.show);  
          
          
          
        saveButton.setOnClickListener(new OnClickListener() {  
  
            @Override  
            public void onClick(View v) {  
                // TODO Auto-generated method stub  
                MyWrite();  
            }  
        });  
        readButton.setOnClickListener(new OnClickListener() {  
  
            @Override  
            public void onClick(View v) {  
                // TODO Auto-generated method stub  
                MyRead();  
            }  
        });  
    }}  

 /* 取得内存文件空间大小及可用大小 */
    @SuppressLint("NewApi") private String getStorgeFileSize(String path){
            String fileSizeDesc = null;
            StatFs statFs = new StatFs(path);                           //获得磁盘状态的对象
            long blockSizeLong = statFs.getBlockSizeLong();             //获得磁盘一个扇区的大小
            long blockCountLong = statFs.getBlockCountLong();           //获得磁盘空间总的扇区数
            long availableBlocksLong = statFs.getAvailableBlocksLong(); //获得磁盘空间总的可用扇区数
            fileSizeDesc = "总内存:" + Formatter.formatFileSize(MainActivity.this, blockSizeLong*blockCountLong)
                    + "; 可用内存:" + Formatter.formatFileSize(MainActivity.this, blockSizeLong*availableBlocksLong);
            return fileSizeDesc;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值