安卓学习-数据存储与IO-File存储

1.data目录下

MainActivity.java

public class MainActivity extends Activity implements OnClickListener {

    EditText editText1;
    TextView textView3;
    SharedPreferences pre;
    Editor editor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText1 = (EditText) findViewById(R.id.editText1);
        textView3 = (TextView) findViewById(R.id.textView3);

        Button btn1 = (Button) findViewById(R.id.button1);
        Button btn2 = (Button) findViewById(R.id.button2);
        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
    }

    public void onClick(View v) {
        try {
            if (v == findViewById(R.id.button1)) {

                String str=editText1.getText().toString();
                FileOutputStream out = openFileOutput("test.bin",Context.MODE_PRIVATE);
                out.write(str.getBytes());
                out.close();
            } else if (v == findViewById(R.id.button2)) {
                FileInputStream in=openFileInput("test.bin");
                int len=in.available();
                byte[] bytes=new byte[len];
                in.read(bytes);
                in.close();

                textView3.setText(new String(bytes));
            }
        } catch (Exception e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
    }
}

activity_main.xml

<RelativeLayout 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"
    tools:context="${relativePackage}.${activityClass}" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/editText1"
        android:layout_alignBottom="@+id/editText1"
        android:layout_alignParentLeft="true"
        android:text="姓名"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="15dp"
        android:layout_marginTop="15dp"
        android:layout_toRightOf="@+id/textView1"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/editText1"
        android:layout_marginTop="22dp"
        android:text="写入" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/button1"
        android:layout_marginTop="36dp"
        android:text="读取" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button2"
        android:layout_alignBottom="@+id/button2"
        android:layout_marginLeft="11dp"
        android:layout_toRightOf="@+id/button2"
        android:text="值:"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/textView2"
        android:layout_alignBottom="@+id/textView2"
        android:layout_centerHorizontal="true"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>

2.SD卡目录下

界面和上面一样

添加权限

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

MainActivity.java

public class MainActivity extends Activity implements OnClickListener {

    EditText editText1;
    TextView textView3;
    SharedPreferences pre;
    Editor editor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText1 = (EditText) findViewById(R.id.editText1);
        textView3 = (TextView) findViewById(R.id.textView3);

        Button btn1 = (Button) findViewById(R.id.button1);
        Button btn2 = (Button) findViewById(R.id.button2);
        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
    }

    public void onClick(View v) {
        try {
            if (v == findViewById(R.id.button1)) {
                //判断是否安装了SD卡
                if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
                    //获取SD卡路径 /storage/emulated/0
                    File sdCardDir=Environment.getExternalStorageDirectory();
                    File file=new File(sdCardDir.getCanonicalPath()+"/test.txt");
                    //判断文件是否存在,不存在则创建
                    if(!file.exists()){
                        file.createNewFile();
                    }
                    String str=editText1.getText().toString();
                    //构建out写入数据
                    FileOutputStream out =new FileOutputStream(file);
                    out.write(str.getBytes());
                    out.close();
                }else{
                    Toast.makeText(MainActivity.this, "没有发现SD卡", Toast.LENGTH_SHORT).show();
                }
            } else if (v == findViewById(R.id.button2)) {
                FileInputStream in=new FileInputStream(Environment.getExternalStorageDirectory().getCanonicalPath()+"/test.txt");
                int len=in.available();
                byte[] bytes=new byte[len];
                in.read(bytes);
                in.close();

                textView3.setText(new String(bytes));
            }
        } catch (Exception e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
    }
}

3.获取SD卡目录小程序

  

点击文件加后,进入下一层目录,点击“父目录”返回上一层

MainActivity.java

public class MainActivity extends Activity {

    //当前位置路径
    String cutFile;

    TextView textView2;
    ListView lv;
    SimpleAdapter adapter;

    ArrayList<HashMap<String,Object>> fileList=new ArrayList<HashMap<String,Object>>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView2=(TextView)findViewById(R.id.textView2);

        try {
            //获取SD卡路径,并保存下来
            cutFile=Environment.getExternalStorageDirectory().getCanonicalPath();
            textView2.setText(cutFile);
        } catch (IOException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }

        listFile(cutFile);

        adapter=new SimpleAdapter(MainActivity.this,
                fileList, R.layout.item,
                new String[]{"name","date","icon"}, new int[]{R.id.textView1,R.id.textView2,R.id.imageView1});

        lv=(ListView)findViewById(R.id.listView1);
        lv.setAdapter(adapter);

        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> paramAdapterView,
                    View paramView, int paramInt, long paramLong) {
                //点击时,获取当前点击的项信息
                HashMap<String,Object> map=fileList.get(paramInt);
                String name=map.get("name")+"";
                String path=map.get("path")+"";
                File file=new File(path);
                //判断是否是目录
                if(file.isDirectory()){
                    //是否是回到上一层
                    if(name.equals("..")){
                        //获取上一层目录
                        File file11=new File(path);
                        listFile(file11.getParentFile().getPath());
                    }else{
                        listFile(path);
                    }

                    //刷新
                    adapter.notifyDataSetChanged();
                }
            }
        });
    }

    public void listFile(String path){
        cutFile=path;
        textView2.setText(cutFile);

        //清空
        fileList.clear();
        //第一层目录,不添加父目录项
        try {
            if(!path.equals(Environment.getExternalStorageDirectory().getCanonicalPath())){
                HashMap<String,Object> map1=new HashMap<String,Object>();
                map1.put("name", "..");
                map1.put("date", "父目录");
                map1.put("icon", R.drawable.folder);
                map1.put("path", cutFile);
                fileList.add(map1);
            }
        } catch (IOException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }

        File sdCardDir=new File(path);
        File[] list=sdCardDir.listFiles();
        for(int i=0;i<list.length;i++){
            File file=list[i];
            HashMap<String,Object> map=new HashMap<String,Object>();
            //获取文件名
            map.put("name", file.getName());
            //获取修改时间
            Long time =file.lastModified();
            Calendar cd = Calendar.getInstance();
            cd.setTimeInMillis(time);
            Date tasktime=cd.getTime();
            //设置日期输出的格式
            SimpleDateFormat df=new SimpleDateFormat("yyyy年MM月dd日  HH时mm分ss秒");
            //格式化输出
            map.put("date", df.format(tasktime));
            //判断是否是目录
            if(file.isDirectory()){
                map.put("icon", R.drawable.folder);
            }else{
                map.put("icon", R.drawable.invoice);
            }
            map.put("path",cutFile+"/"+file.getName());
            fileList.add(map);
        }

    }

}

item.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:padding="10dp">

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView1"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/textView1"
        android:text="创建时间"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/imageView1"
        android:layout_marginLeft="15dp"
        android:layout_toRightOf="@+id/imageView1"
        android:text="文件名"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="19dp"
        android:src="@drawable/folder" />

</RelativeLayout>

activity_main.xml

<RelativeLayout 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"
    tools:context="${relativePackage}.${activityClass}" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView1" >

    </ListView>

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="当前路径:"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="14dp"
        android:layout_toRightOf="@+id/textView1"
        android:text="当前路径"
        android:textAppearance="?android:attr/textAppearanceSmall" />

</RelativeLayout>

两个图片资源

folder.png

invoice.png

时间: 2024-10-15 00:34:04

安卓学习-数据存储与IO-File存储的相关文章

Android学习笔记十七.Android数据存储与IO.File存储常用API

Android通过一套完整的I/O流体系,包括FileInputStream.FileOutputStream等,通过这些I/O流来访问手机存储上的文件. 一.API 1.File (1)功能:该类提供一些有限的功能-获取或设置文件的权限.文件类型.最后依次修改时间等,通常它所代表的文件名(包含路径)将被转换为UTF-8字节序列被使用. (2)继承关系 java.lang.Object ? java.io.File (3)构造方法  File(File dir, String name):构造一

安卓学习-数据存储与IO-Sqlite

直接用sql语句实现 ,添加.删除.修改 MainActivity.java public class MainActivity extends Activity implements OnClickListener{ Button btn1; Button btn2; Button btn3; EditText editText1; EditText editText2; SQLiteDatabase db; ListView listView1; Cursor cursor; @Overri

安卓学习-数据存储与IO-SharedPreferences

运行完后,可以在DDMS,看到这个xml文件 MainActivity.java public class MainActivity extends Activity implements OnClickListener{ EditText editText1; TextView textView3; SharedPreferences pre; Editor editor; @Override protected void onCreate(Bundle savedInstanceState)

android-数据存储之外部file存储(sdcard)

一.基础概要 1.说明: 1>应用程序运行用到的数据文件可以保存到sd卡中 2>文件类型:任意 3>数据保存路径: 路径1:/storage/sdcard/Android/data/packageName/files     其它应用可以访问,应用卸载时删除 路径2:/storage/sdcard/xxx/    (表示自己创建的文件--xxx)     其它应用可以访问,应用卸载时不会被删除 2.相关API Environment 操作sd卡工具类: ---得到sd卡状态:Enviro

Android学习笔记 --- 数据存储与访问 (File,sdcard,sharedpreferences,sqlite)

一.使用文件进行数据存储 1.context.openFileOutput()方法  写入文件内容 在上下文context中 openFileOutput方法可以用于把数据输出到文件中 示例代码: public static void fileStorage(Context context){ try { FileOutputStream fos = context.openFileOutput("filedata.txt", context.MODE_PRIVATE); fos.wr

Android数据存储之IO

Android开发中免不了数据本地的存储,今天我们来说一说如何利用IO流来进行数据存储. 这里我们通过模拟一个QQ登陆界面的小demo来实际操作IO流. 功能描述:点击按钮能够保存用户输入的用户名和密码,当点击记住密码时,亦能在应用第二次打开时,回显用户名和密码 1.这里布局文件的代码就不贴了,看效果图 2.MainActivity.java package com.example.viewswitchtest; import java.io.BufferedReader; import jav

android学习笔记46——File存储

File存储——IO操作文件 openFileOutput.openFileInput Context提供了如下两个方法来打开本应用程序的数据文件夹里面的文件IO流. 1.FileInputStream openFileInput(String name):打开应用程序中的数据文件夹下的name文件对应输入流 2.FileOutputStream openFileOutput(String name,int mode):打开应用程序的数据文件下的name文件对应的输出流 注意: FileOutp

[安卓基础] 012.存储数据(下)——文件存储

*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; text-decoration: none; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: poin

Android笔记----Android的数据存储和IO操作

使用SharedPreferences File存储 SQLite数据库           使用SharedPreferences 1.1 SharedPreferences与Editor简介 应用程序有少量的数据需要保存,而且这些数据的格式很简单,都是普通的字符串.标量类型的值等,比如应用程序的各种配置信息,对于这种数据,Android提供了SharedPreferences. SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此它保存的数据主要是简单类型的key