android IO 详解,代码+注释+详解

package example.com.myapplication;

import android.content.res.AssetManager;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

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

public class MainActivity extends AppCompatActivity {

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

        /*
         * 1.创建并返回一个目录,在这个目录下存储应用程序的数据文件
         * 输出结果为: getFilesDir():/data/data/com.ghg.IO/files
         */
        File dir= getFilesDir();
        System.out.println("一、获取当前app数据的存储数据文件 getFilesDir():"+dir.toString());

       /*
         * 2.创建并返回一个目录,在这个目录下存储应用程序的缓冲文件,当系统资源不足时,系统清除这下面的文件
         * 输出结果为:dir2=/data/data/com.ghg.IO/cache
         */
        File dir2=getCacheDir();
        System.out.println("二、存储应用程序的缓冲文件,当系统资源不足时,系统清除这下面的文件 dir2="+dir2.toString());
       /*
        * 3.创建并返回一个指定名称的目录,在这个目录下来存些东西
        * 输出结果为:dir3=/data/data/com.ghg.IO/app_abc
        */
        File dir3=getDir("abc", MODE_PRIVATE);
        System.out.println("三、指定名称的目录,在这个目录下来存些东西 dir3="+dir3.toString());

        /*
         * 4.用于返回数据库中指定名字的文件路径,在内部存储中应该保存的路径;
         * 输出结果为:dir4=/data/data/com.ghg.IO/databases/stu.db
         */
        File dir4=getDatabasePath("stu.db");
        System.out.println("四、返回数据库中指定名字的文件路径,在内部存储中应该保存的路径 dir4="+dir4.toString());
         /*
        * 5.打开一个输出流对象,通过这个输出流对象可以向abc.txt文件中写入一些数据,
        * abc.txt文件位于/data/data/com.ghg.IO/files下;
        */
        try {
            FileOutputStream out=openFileOutput("abc.txt", MODE_PRIVATE);
            out.write("gao hong guo jiajia".getBytes());
            out.flush();
            out.close();
            System.out.println("向abc中写入数据 gao hong guo jiajia");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

       /*
         * 6.获取一个输入流对象,通过这个输入流对对象读取指定文件,这个文件在/data/data/com.ghg.IO/files下;
         */

        try {
            FileInputStream is=openFileInput("abc.txt");
            ByteArrayOutputStream out=new ByteArrayOutputStream();
            int len=0;
            byte[] buf=new byte[4];
            while((len=is.read(buf))>0){
                out.write(buf, 0, len);
                out.flush();
            }
            out.close();
            is.close();
            System.out.println("五、输入流对象,通过这个输入流对对象读取指定文件"+out.toString());
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        /*
         *7. 获取内部存储的数据目录
         * 输出结果是:dir7=/data
         */
        File dir7= Environment.getDataDirectory();
        System.out.println("七、获取内部存储的数据目录   dir7="+dir7.toString());

         /*
         * 8.获取内部存储下载缓冲目录,隐藏的目录;
         * 输出结果为:dir8=/cache
         */
        File dir8=Environment.getDownloadCacheDirectory();
        System.out.println("八、内部存储下载缓冲目录,隐藏的目录 dir8="+dir8.toString());

         /*
         * 9.获取内部下载系统的根目录
         * 输出结果为:dir9=/system
         */
        File dir9= Environment.getRootDirectory();
        System.out.println("九、获取内部下载系统的根目录  dir9="+dir9.toString());
         /*
        * 10.创建并返回外部存储文件目录,需要sd卡的的写入数据权限;
        * 输出结果是:dir10=/mnt/sdcard/Android/data/com.ghg.IO/files/Music
        */
        File dir10=getExternalFilesDir(Environment.DIRECTORY_MUSIC);
        System.out.println("十、创建并返回外部存储文件目录,需要sd卡的的写入数据权限 dir10="+dir10.toString());
        /*
        * 11.创建并返回外部存储缓冲目录,需要sd卡的写入数据权限;
        * 输出结果是:dir11=/mnt/sdcard/Android/data/com.ghg.IO/cache
        */
        File dir11= getExternalCacheDir();
        System.out.println("十一、创建并返回外部存储缓冲目录,需要sd卡的写入数据权限 dir11="+dir11.toString());
        /*
           * 12.返回sdcard的根目录;
           * 结果: dir12=/mnt/sdcard
           */
        File dir12=Environment.getExternalStorageDirectory();
        System.out.println("十二、返回sdcard的根目录; dir12="+dir12.toString());

           /*
           * 13.返回sdcard公共存储目录;
           * 结果:dir13=/mnt/sdcard/Music
           */
        File dir13=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
        System.out.println("十三、返回sdcard公共存储目录 dir13="+dir13.toString());

        /*
           * 14.返回sdcard的状态,每次使用sdcard时,都会检查其状态;
           * 结果:status=mounted
           */
        String status=Environment.getExternalStorageState();
        System.out.println("14.返回sdcard的状态,每次使用sdcard时,都会检查其状态; status="+status);

          /*
          * 15.对源生资源的访问,在assets下放一个stu.db,读取并写入内部存储数据文件目录下;
          */
        File dir1=getDatabasePath("stu.db");
        if (!dir1.exists()) {
            if (!dir1.getParentFile().exists()) {
                dir1.getParentFile().mkdir();
            }

            AssetManager manager=getAssets();
            try {
                InputStream in=manager.open("stu.db");
                FileOutputStream out=new FileOutputStream(dir1);
                int len=0;
                byte[] buf=new byte[512];
                while ((len=in.read(buf))>0){
                    out.write(buf, 0, len);
                    out.flush();
                }
                in.close();
                out.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值