Android的文件操作

本文详细介绍了Android应用中文件操作的基本方法,包括系统默认路径及自定义路径下的文件读写过程。涉及字节流与字符流的使用,以及利用ByteArrayOutputStream和BufferedReader进行数据解析的技术细节。

关于Android的文件操作。
PS:个人对于IO流的理解就是 一切都是基于本机JVM而言。输入和输出易混。
输入就是输入到本机JVM中,而输出则就是从本机JVM输出到其他地方存储。
而IO流分为两种, 一种是字节流。一种是字符流
字节流。InputStream ByteArrayOutputStream
字符流。Reader Buffered BufferedReader InputStreamReader
1.输出流(简单明了)

    private void outFile(String info) {
        // 系统默认的存储路径
        try {
            //打开本地的存储路径并创建一个输出流
            FileOutputStream fileOutPut = openFileOutput("zhangstar.txt",
                    MODE_PRIVATE);
            //这里外面用输出流输出一个字符串
            //当然不能输出字符串,必须先转换为byte类型的数组
            fileOutPut.write(info.getBytes());
            //关闭输出流
            fileOutPut.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

openFileOutput是Android打开本机存储路径的一个方法。
也就是系统默认的存储路径 data/data/..

2.输入流(简单明了)


    private String inFile() {
        // 系统默认的存储路径
        String info = "";
        try {
            //打开本地的存储路径并创建一个输入流
            FileInputStream fileInPut = openFileInput("zhangstar.txt");
            //实例一个byte数组    
            byte[] b = new byte[fileInPut.available()];
            //将输入流去读取文件,读取文件转换为字节存入刚刚定义的byte数组
            fileInPut.read(b);
            //再通过转码的形式将byte[]b里面的内容转换为字符串
            info = EncodingUtils.getString(b, "UTF-8");
            //最后关闭输入流
            fileInPut.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return info;
    }

上面两种是根据系统默认目录来输入输出的方式。
下面两种自定义路径的输入输出的方式。(以SD卡为例)

3.自定义路径输出流

private void customFilePathOutFile(String info) {
        try {
        /** 使用自定义路径时,则不能去用openFileOutput去实例了。
        /** 必须new一个对象。 
        */  Environment.getExternalStorageDirectory()表示当前SD卡的路径
            FileOutputStream fileOutPut = new FileOutputStream(new File(
                    Environment.getExternalStorageDirectory(), "zhangstar.txt"));
            fileOutPut.write(info.getBytes());
            fileOutPut.close();

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

4.自定义路径输入流

    private String customFilePathInFile() {
        String info = "";
        try {
            FileInputStream fileInPut = new FileInputStream(new File(
                    Environment.getExternalStorageDirectory(), "zhangstar.txt"));
            byte[] b = new byte[fileInPut.available()];
            fileInPut.read(b);
            info = EncodingUtils.getString(b, "UTF-8");
            fileInPut.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return info;

    }

5.使用ByteArrayOutputStream输出流和FileInputStream输入流来解析数据

    private String ByteAyyayInPutFile() {  
        String info = "";
        try {
            //
            FileInputStream inputStream = new FileInputStream(new File(
                    Environment.getExternalStorageDirectory(), "zhangstar.txt"));
            //确定当前输入流的长度(注意的是,一定要作为一个变量)
            //不能直接写  byte[] b =new byte[inputStream.available()]
            //否则得不到结果
            int length=inputStream.available();
            byte[] b = new byte[length];
            //实例化一个ByteArrayOutputStream输出流
            ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
            //用输入流去读文件到数组里
            while (inputStream.read(b) != -1) {
            //ByteArrayOutputStream可以当做为一个缓冲区。
            //此类实现了一个输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动 
            //增长。可使用 toByteArray() 和 toString() 获取数据。 
                arrayOutputStream.write(b, 0, length);
            }
            //然后将ByteArrayOutputStream转换为byte类型,最后转换为字符串
            //
            info = EncodingUtils.getString(arrayOutputStream.toByteArray(),
                    "UTF-8");
            //后声明的流先关闭
            arrayOutputStream.close();
            inputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return info;
    }

6.使用BufferedReader去读取数据

private String BufferReaderInPutFile(){
             //定义一个字符串缓冲区
        StringBuffer info=new StringBuffer();
        try {
            //
            FileInputStream fileInPut=openFileInput("zhangstar.txt");
            //实例化一个BUfferedReader
            //BufferedReader:从字符输入流中读取文本,缓冲各个字符,
            //从而实现字符、数组和行的高效读取。 
            //可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。 
            BufferedReader bd = new BufferedReader(new InputStreamReader(fileInPut));
            String str ="";
            //按行读取
            while((str=bd.readLine())!=null){
            //每读取一行字符同添加到StringBuffer里面
                info.append(str);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        //最后将StringBuffer转换为字符串
        return info.toString();
    }

7.列出一个File类的方法

        File file =new File(Environment.getExternalStorageDirectory(), "xxxx.jpg");
        String name =file.getName();
        String filename=file.getName();//获取文件名
        System.out.println(filename);
        String filepath=file.getAbsolutePath();//获取文件绝对路径
        System.out.println(filepath);
        String filepath2=file.getPath();//相对路径
        System.out.println(filepath2);
        String parentPath=file.getParent();//父路径
        System.out.println(parentPath);
        boolean b=file.exists();//判断文件是否存在
        System.out.println(b);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值