Android的文件操作

来源:互联网 发布:ummy for mac 编辑:程序博客网 时间:2024/05/20 03:37

关于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);
0 0
原创粉丝点击