zoukankan      html  css  js  c++  java
  • 文件存储之内部存储和外部存储

    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;
            
        }
    }
  • 相关阅读:
    过滤器
    联系数据库 电话本例子
    连接数据库日志例题
    登录注册 servlet
    Pandas截取列部分字符,并据此修改另一列的数据
    Excel 如何判断某列哪些单元格包含某些字符
    Pandas逐行读取Dateframe并转为list
    Pandas: 使用str.replace() 进行文本清洗
    如何在xlwt中编写多个列的单元格?
    python:循环定义、赋值多个变量
  • 原文地址:https://www.cnblogs.com/fangg/p/5723166.html
Copyright © 2011-2022 走看看