• 用IO流向存储器或SD卡中存入/读取字符的工具类


    FileManager

    package com.kale.utils;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintStream;
    
    import android.content.Context;
    import android.os.Environment;
    
    /**
     * @author:Jack Tony
     * @tips  :
     *  <!-- 读写SD卡的权限 -->
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     * @date  :2014-6-30
     */
    public class FileManager {
        private String SD_PATH;
        private String fileName;
        private String dirName;
    
        public String getSD_PATH() {
            return SD_PATH;
        }
        
        /**
         * @param permission 是否添加了权限
         */
        public FileManager(boolean permission) {
            //得到当前外部存储设备的目录
            SD_PATH = Environment.getExternalStorageDirectory() + "/";
        }
        
        /**
         * 在SD卡上创建文件
         * 
         * @throws IOException
         */
        public File creatSDFile(String dirName ,String fileName) throws IOException {
            this.fileName = fileName;
            this.dirName = dirName;
            File file = new File(creatSDDir(dirName), fileName);
            return file;
        }
        
        
        public String getFileWholePath() throws IOException{
            if (dirName == null || fileName == null) {
                return SD_PATH + dirName + "/" + fileName;
            }
            else {
                throw new IOException("can't find dirName or fileName");
            }
            
        }
        
        /**
         * 在SD卡上创建目录
         * 
         * @param dirName
         */
        public File creatSDDir(String dirName) {
            File dir = new File(SD_PATH + dirName);
            dir.mkdir();
            return dir;
        }
        
    
    
        /**
         * 判断SD卡上的文件夹是否存在
         * kale,file.txt->kale/file.txt
         */
        public boolean isFileExist(String dirName ,String fileName){
            File file = new File(SD_PATH +dirName+"/"+ fileName);
            return file.exists();
        }
        
        /**
         * 将一个InputStream里面的数据写入到SD卡中
         * example:kale,file.txt,inputStream->kale/file.txt
         * InputStream is = new ByteArrayInputStream( "kale data".getBytes() );
           manager.saveToSdCard("dir02", "kale.txt", is );
         */
        public File saveToSDcard(String dirName,String fileName,InputStream input){
            File file = null;
            OutputStream output = null;
            try{
                //创建目录
                creatSDDir(dirName);
                //建立文件
                file = creatSDFile(dirName ,fileName);
                output = new FileOutputStream(file);
                byte buffer [] = new byte[5 * 1024];
                //int count = 0;
                while((input.read(buffer)) != -1){
                    //String str = new String(buffer,0,count);
                    //str = new String(str.getBytes("iso-8859-1"),"utf-8");                
                    /*System.out.println("---------File Manager----start--------");
                    System.out.println(str);
                    System.out.println("---------File Manager-----end-------");*/
                    output.write(buffer);
                }
                output.flush();
            }
            catch(Exception e){
                e.printStackTrace();
            }
            finally{
                try{
                    output.close();
                }
                catch(Exception e){
                    e.printStackTrace();
                }
            }
            return file;
        }
        
        /**
         * @param dirName
         * @param fileName
         * @return 从sd卡中读取文件的字符,返回String
         * @throws Exception
         */
        public String readFromSDcard(String dirName,String fileName) throws FileNotFoundException {
            try {
                File file = new File(SD_PATH +dirName+"/"+ fileName);
                FileInputStream fis = new FileInputStream(file);
                BufferedReader br = new BufferedReader(new InputStreamReader(fis));
                StringBuilder sb = new StringBuilder("");
                String line = null;
                //循环读取文件内容
                while((line = br.readLine()) != null) {
                    sb.append(line);
                }
                br.close();
                return sb.toString().trim();
            } 
            catch(FileNotFoundException e) {
                e.printStackTrace();
                throw new FileNotFoundException("no such file");
            }
            catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
        
        /////////////////////// 直接读取包名文件夹下的文件,而不是SD卡中的 /////////////////////
        /**
         * @param str
         * 将string写入到data/data/包名/files中
         * example:write(file.txt ,data)
         */
        public static void write(Context mContext,String fileName,String str) {
            try {
                /**
                 * MODE_PRIVATE:该文件只能被当前程序读写 MODE_APPEND:用追加方式打开文件,新写入的内容追加到末尾
                 * MODE_WORLD_READABLE:该文件内容可以被其他程序读
                 * MODE_WORLD_WRITEABLE:该文件内容可以被其他程序读写
                 */
                FileOutputStream fos = mContext.openFileOutput(fileName, Context.MODE_PRIVATE | Context.MODE_APPEND);
                PrintStream ps = new PrintStream(fos);
                // 输出文件的内容
                ps.println(str);
                ps.close();
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 通过文件名来读取data/data/包名/files下的文件
         * example:read("file.txt")
         * @return 
         * 返回null,表示找不到文件,或出现异常
         */
        public static String read(Context mContext,String fileName) {
            try {
                // 打开文件输入流
                FileInputStream fis = mContext.openFileInput(fileName);
                byte[] buff = new byte[1024];
                int hasRead = 0;
                StringBuilder sb = new StringBuilder("");
                // 读取文件内容
                while ((hasRead = fis.read(buff)) > 0) {
                    sb.append(new String(buff, 0, hasRead));
                }
                // 关闭文件输入流
                fis.close();
                return sb.toString();
            } 
            catch(FileNotFoundException e) {
                e.printStackTrace();
            }
            catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
    }
  • 相关阅读:
    WCF在tcp通道下启用httpget
    mounted里面this.$refs.xxx的内容是undefined
    小程序和vue的区别
    多维数组扁平化处理
    浏览器事件循环机制(event loop)
    前端优化总结
    vue子组件通知父组件使用方法
    axios拦截器使用方法
    vue-router配置
    斐波那契数列及青蛙跳台阶问题
  • 原文地址:https://www.cnblogs.com/tianzhijiexian/p/3974581.html
Copyright © 2020-2023  润新知