android fileheper文件操作类

来源:互联网 发布:淘宝一伍一拾 编辑:程序博客网 时间:2024/06/05 09:54

input.java

public class Input extends InputStream{private static final int DEFAULT_BUFFER_SIZE = 1024;    private byte[] buf;    private int pos;    private int count;    private InputStream in;        public Input(InputStream in) {        this(in,DEFAULT_BUFFER_SIZE);    }        public Input(InputStream in,int bufferSize) {        this.in = in;        buf = new byte[bufferSize];    }        public void close() throws IOException {    buf = null;    in.close();    }    @Overridepublic int read() throws IOException {// TODO Auto-generated method stubif(pos >= count || pos>= buf.length) {pos = 0;count = in.read(buf, 0, DEFAULT_BUFFER_SIZE);}if(pos >= count) return -1;return buf[pos++] & 0xff;}@Overridepublic int read(byte[] b) throws IOException {// TODO Auto-generated method stubreturn read(buf, 0, b.length);}@Overridepublic int read(byte[] b, int off, int len) throws IOException {// TODO Auto-generated method stub int remain =count -pos;         if (remain >= (len - off)) {             System.arraycopy(buf,pos, b, off, len);             pos += len;             return len;         }          else {                 if (remain > 0) {                         System.arraycopy(buf,pos, b, off, remain);                         pos += remain;                         int newRemain = len - remain;                         byte[] remainData =new byte[newRemain];                         int rd =in.read(remainData, 0, newRemain);                         System.arraycopy(remainData, 0, b, off + remain, rd);                         return remain + rd;                 } else {                         int rd =in.read(b, off, len);                         return rd;                 }         }}public boolean readBoolean()throws IOException {        int ch = read();        if (ch < 0) {        throw new EOFException();        }        return (ch != 0);}public int readUnsignedByte()throws IOException {        int ch = read();        if (ch < 0) {        throw new EOFException();        }        return ch;}public int readUnsignedShort()throws IOException {int ch1 = read();int ch2 = read();if ((ch1 | ch2) < 0) {throw new EOFException();}return (ch1 << 8) + (ch2 << 0);} public short readShort()throws IOException {int ch1 = read();int ch2 = read();if ((ch1 | ch2) < 0) {        throw new EOFException();}return (short) ((ch1 << 8) + (ch2 << 0));}public char readChar()throws IOException {    int ch1 = read();    int ch2 = read();    if ((ch1 | ch2) < 0) {            throw new EOFException();    }    return (char) ((ch1 << 8) + (ch2 << 0));}public int readInt()throws IOException {        int ch1 = read();        int ch2 = read();        int ch3 = read();        int ch4 = read();        if ((ch1 | ch2 | ch3 | ch4) < 0) {                throw new EOFException();        }        return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0));}public long readLong()throws IOException {        return ((long) (readInt()) << 32) + (readInt() & 0xFFFFFFFFL);}public float readFloat()throws IOException {return Float.intBitsToFloat(readInt());}public double readDouble()throws IOException {return Double.longBitsToDouble(readLong());}public String readUTF8()throws IOException {        int utflen = readUnsignedShort();        if (utflen <= 0) {                return"";        }        char str[] =new char[utflen];        byte bytearr[] =new byte[utflen];        int c, char2, char3;        int count = 0;        int strlen = 0;        read(bytearr);        while (count < utflen) {                c = (int) bytearr[count] & 0xff;                switch (c >> 4) {                case 0:                case 1:                case 2:                case 3:                case 4:                case 5:                case 6:                case 7:                        /* 0xxxxxxx */                        count++;                        str[strlen++] = (char) c;                        break;                case 12:                case 13:                        /* 110xxxxx 10xxxxxx */                        count += 2;                        if (count > utflen) {                                throw new UTFDataFormatException();                        }                        char2 = (int) bytearr[count - 1];                        if ((char2 & 0xC0) != 0x80) {                                throw new UTFDataFormatException();                        }                        str[strlen++] = (char) (((c & 0x1F) << 6) | (char2 & 0x3F));                        break;                case 14:                        /* 1110xxxx 10xxxxxx 10xxxxxx */                        count += 3;                        if (count > utflen) {                                throw new UTFDataFormatException();                        }                        char2 = (int) bytearr[count - 2];                        char3 = (int) bytearr[count - 1];                        if (((char2 & 0xC0) != 0x80) || ((char3 & 0xC0) != 0x80)) {                                throw new UTFDataFormatException();                        }                        str[strlen++] = (char) (((c & 0x0F) << 12)                                       | ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0));                        break;                default:                        /* 10xxxxxx, 1111xxxx */                        throw new UTFDataFormatException();                }        }        // The number of chars produced may be less thanutflen        return new String(str, 0, strlen);}public Serializable readSerializable() throws IOException {        String className = readUTF8();        Serializable serializable =null;        try {        serializable = (Serializable) Class.forName(className).newInstance();        serializable.deserialize(this);        } catch (Exception e) {        throw new IOException(e.toString());        }        return serializable;}public byte[] readAll() throws IOException {        ByteArrayOutputStream baos =new ByteArrayOutputStream();        int ch;        byte[] buffer =new byte[1024];        while ((ch =in.read(buffer)) != -1) {                baos.write(buffer, 0, ch);        }        byte[] ret = baos.toByteArray();        baos.close();        return ret;}}


output.java

public class Output {    private static final int DEFAULT_BUFFER_SIZE = 1024;    private byte[] buf;    private int count;    private OutputStream out;            public Output(OutputStream out) {    this(out,DEFAULT_BUFFER_SIZE);    }        public Output(OutputStream out,int bufferSize) {    this.out = out;    buf =new byte[bufferSize];    }        private void flushBuffer()throws IOException {    if (count > 0) {            out.write(buf, 0,count);            count = 0;    }    }        public void flush()throws IOException {    flushBuffer();    out.flush();    }        public void close()throws IOException {    flush();    buf = null;    out.close();    }        public void write(int b) throws IOException {    if (count >=buf.length) {    flushBuffer();    }    buf[count++] = (byte) b;    }        public void write(byte[] b) throws IOException {    write(b, 0, b.length);    }        public void write(byte[] b, int off,int len)throws IOException {    if(len >= buf.length) {    flushBuffer();    out.write(b, off, len);    return;    }    else if (len > buf.length - count) {    flushBuffer();    }    System.arraycopy(b, off, buf, count, len);    count += len;    }        public void writeBoolean(boolean v) throws IOException {    write(v ? 1 : 0);    }        public void writeShort(int v) throws IOException {    write((v >>> 8) & 0xFF);    write(v & 0xFF);    }        public void writeChar(int v) throws IOException {    write((v >>> 8) & 0xFF);    write(v & 0xFF);    }        public void writeInt(int v) throws IOException {    write((v >>> 24) & 0xFF);    write((v >>> 16) & 0xFF);    write((v >>> 8) & 0xFF);    write(v & 0xFF);    }        public void writeLong(long v) throws IOException {    write((int) (v >>> 56) & 0xFF);        write((int) (v >>> 48) & 0xFF);        write((int) (v >>> 40) & 0xFF);        write((int) (v >>> 32) & 0xFF);        write((int) (v >>> 24) & 0xFF);        write((int) (v >>> 16) & 0xFF);        write((int) (v >>> 8) & 0xFF);        write((int) v & 0xFF);    }        public void writeFloat(float v) throws IOException {    writeInt(Float.floatToIntBits(v));    }        public void writeDouble(double v) throws IOException {    writeLong(Double.doubleToLongBits(v));    }        public void writeUTF8(String str)throws IOException {    if (str ==null) {            str = "";    }    int strlen = str.length();    int utflen = 0;    char[] charr =new char[strlen];    int c, count = 0;    str.getChars(0, strlen, charr, 0);    for (int i = 0; i < strlen; i++) {            c = charr[i];            if ((c >= 0x0001) && (c <= 0x007F)) {                    utflen++;            } else if (c > 0x07FF) {                    utflen += 3;            } else {                    utflen += 2;            }    }    if (utflen > 65535) {            throw new UTFDataFormatException();    }    byte[] bytearr =new byte[utflen + 2];    bytearr[count++] = (byte) ((utflen >>> 8) & 0xFF);    bytearr[count++] = (byte) ((utflen >>> 0) & 0xFF);        for (int i = 0; i < strlen; i++) {            c = charr[i];            if ((c >= 0x0001) && (c <= 0x007F)) {                    bytearr[count++] = (byte) c;            } else if (c > 0x07FF) {                    bytearr[count++] = (byte) (0xE0 | ((c >> 12) & 0x0F));                    bytearr[count++] = (byte) (0x80 | ((c >> 6) & 0x3F));                    bytearr[count++] = (byte) (0x80 | ((c >> 0) & 0x3F));            } else {                    bytearr[count++] = (byte) (0xC0 | ((c >> 6) & 0x1F));                    bytearr[count++] = (byte) (0x80 | ((c >> 0) & 0x3F));            }    }    write(bytearr);    }        public void writeSerializable(Serializable serializable)throws IOException {    writeUTF8(serializable.getClass().getName());    serializable.serialize(this);    }    }


Serializable.java

public interface Serializable {public void serialize(Output out)throws IOException;public void deserialize(Input in)throws IOException;}

filehelper.java

import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import android.content.Context;import android.os.Environment;import android.os.StatFs;public class FileHelper {private Context context;    private String SDPATH;//SD卡路径    private String FILESPATH;//文件路径        public FileHelper(Context context) {// TODO Auto-generated constructor stub    this.context = context;}        /**     * 判断SDCard是否存在?是否可以进行读写     * */    public boolean SDCardState(){    if(Environment.getExternalStorageState().equals(            Environment.MEDIA_MOUNTED)){//表示SDCard存在并且可以读写        return true;    }else{        return false;    }    }        /**     * 获取SDCard文件路径     * */    public String SDCardPath(){    if(SDCardState()){//如果SDCard存在并且可以读写        SDPATH = Environment.getExternalStorageDirectory().getPath();        return SDPATH;    }else{        return null;    }    }        /**     * 获取SDCard总容量大小(MB)     * */    public long SDCardTotal(){    if(null != SDCardPath()&&SDCardPath().equals("")) {        StatFs statfs = new StatFs(SDCardPath());        //获取SDCard的Block总数        long totalBlocks = statfs.getBlockCount();        //获取每个block的大小,字节为单位        long blockSize = statfs.getBlockSize();        //计算SDCard 总容量大小MB        long SDtotalSize = totalBlocks*blockSize/1024/1024;        return SDtotalSize;    }else{        return 0;    }    }        /**     * 在SD卡上创建目录      *      * @param dirName     *            要创建的目录名     * @return创建得到的目录     */     public File createSDDir(String dirName) {         File dir = new File(SDPATH + dirName);        dir.mkdir();         return dir;     }         /**     * 删除SD卡上的目录     *      * @param dirName     */     public boolean delSDDir(String dirName) {         File dir = new File(SDPATH + dirName);         return delDir(dir);     }         /**     * 在SD卡上创建文件     *      * @throws IOException     */     public File createSDFile(String fileName)throws IOException {         File file = new File(SDPATH + fileName);         file.createNewFile();         return file;     }        /**     * 判断文件是否已经存在     *      * @param fileName     *            要检查的文件名     * @return boolean, true表示存在,false表示不存在     */     public boolean isFileExist(String fileName) {         File file = new File(SDPATH + fileName);         return file.exists();     }        /**     * 删除SD卡上的文件     *      * @param fileName     */     public boolean delSDFile(String fileName) {         File file = new File(SDPATH + fileName);         if (file ==null || !file.exists() || file.isDirectory())             return false;         file.delete();         return true;     }           /**     * 修改SD卡上的文件或目录名     *      * @param fileName     */     public boolean renameSDFile(String oldfileName, String newFileName) {         File oleFile = new File(SDPATH + oldfileName);         File newFile = new File(SDPATH + newFileName);         return oleFile.renameTo(newFile);     }         /**     * 拷贝SD卡上的单个文件     *      * @param path     * @throws IOException     */     public boolean copySDFileTo(String srcFileName, String destFileName)             throws IOException {         File srcFile = new File(SDPATH + srcFileName);         File destFile = new File(SDPATH + destFileName);         return copyFileTo(srcFile, destFile);     }         /**     * 拷贝SD卡上指定目录的所有文件     *      * @param srcDirName     * @param destDirName     * @return     * @throws IOException     */     public boolean copySDFilesTo(String srcDirName, String destDirName)             throws IOException {         File srcDir = new File(SDPATH + srcDirName);         File destDir = new File(SDPATH + destDirName);         return copyFilesTo(srcDir, destDir);     }         /**     * 移动SD卡上的单个文件     *      * @param srcFileName     * @param destFileName     * @return     * @throws IOException     */     public boolean moveSDFileTo(String srcFileName, String destFileName)             throws IOException {         File srcFile = new File(SDPATH + srcFileName);         File destFile = new File(SDPATH + destFileName);         return moveFileTo(srcFile, destFile);     }         /**     * 移动SD卡上的指定目录的所有文件     *      * @param srcDirName     * @param destDirName     * @return     * @throws IOException     */     public boolean moveSDFilesTo(String srcDirName, String destDirName)             throws IOException {         File srcDir = new File(SDPATH + srcDirName);         File destDir = new File(SDPATH + destDirName);         return moveFilesTo(srcDir, destDir);     }         /**     * 将文件写入sd卡。如:writeSDFile("test.txt");     * @param fileName     */     public Output writeSDFile(String fileName)throws IOException {         File file = new File(SDPATH + fileName);         FileOutputStream fos = new FileOutputStream(file);         return new Output(fos);     }      /**     * 在原有文件上继续写文件。如:appendSDFile("test.txt");     */     public Output appendSDFile(String fileName)throws IOException {         File file = new File(SDPATH + fileName);         FileOutputStream fos = new FileOutputStream(file,true);         return new Output(fos);     }      /**     * 从SD卡读取文件。如:readSDFile("test.txt");     */     public Input readSDFile(String fileName)throws IOException {         File file = new File(SDPATH + fileName);         FileInputStream fis = new FileInputStream(file);         return new Input(fis);     }         /**     * 建立私有文件     *      * @param fileName     * @return     * @throws IOException     */     public File creatDataFile(String fileName)throws IOException {         File file = new File(FILESPATH + fileName);         file.createNewFile();         return file;     }      /**     * 建立私有目录     *      * @param dirName     * @return     */     public File creatDataDir(String dirName) {         File dir = new File(FILESPATH + dirName);         dir.mkdir();         return dir;     }      /**     * 删除私有文件     *      * @param fileName     * @return     */     public boolean delDataFile(String fileName) {         File file = new File(FILESPATH + fileName);         return delFile(file);     }      /**     * 删除私有目录     *      * @param dirName     * @return     */     public boolean delDataDir(String dirName) {         File file = new File(FILESPATH + dirName);         return delDir(file);     }      /**     * 更改私有文件名     *      * @param oldName     * @param newName     * @return     */     public boolean renameDataFile(String oldName, String newName) {         File oldFile = new File(FILESPATH + oldName);         File newFile = new File(FILESPATH + newName);         return oldFile.renameTo(newFile);     }      /**     * 在私有目录下进行文件复制     *      * @param srcFileName     *            :包含路径及文件名     * @param destFileName     * @return     * @throws IOException     */     public boolean copyDataFileTo(String srcFileName, String destFileName)             throws IOException {         File srcFile = new File(FILESPATH + srcFileName);         File destFile = new File(FILESPATH + destFileName);         return copyFileTo(srcFile, destFile);     }      /**     * 复制私有目录里指定目录的所有文件     *      * @param srcDirName     * @param destDirName     * @return     * @throws IOException     */     public boolean copyDataFilesTo(String srcDirName, String destDirName)             throws IOException {         File srcDir = new File(FILESPATH + srcDirName);         File destDir = new File(FILESPATH + destDirName);         return copyFilesTo(srcDir, destDir);     }      /**     * 移动私有目录下的单个文件     *      * @param srcFileName     * @param destFileName     * @return     * @throws IOException     */     public boolean moveDataFileTo(String srcFileName, String destFileName)             throws IOException {         File srcFile = new File(FILESPATH + srcFileName);         File destFile = new File(FILESPATH + destFileName);         return moveFileTo(srcFile, destFile);     }      /**     * 移动私有目录下的指定目录下的所有文件     *      * @param srcDirName     * @param destDirName     * @return     * @throws IOException     */     public boolean moveDataFilesTo(String srcDirName, String destDirName)             throws IOException {         File srcDir = new File(FILESPATH + srcDirName);         File destDir = new File(FILESPATH + destDirName);         return moveFilesTo(srcDir, destDir);     }      /**     * 将文件写入应用私有的files目录。如:writeFile("test.txt");     */     public Output wirteFile(String fileName)throws IOException {         OutputStream os = context.openFileOutput(fileName,                 Context.MODE_WORLD_WRITEABLE);         return new Output(os);     }      /**     * 在原有文件上继续写文件。如:appendFile("test.txt");     */     public Output appendFile(String fileName)throws IOException {         OutputStream os = context.openFileOutput(fileName, Context.MODE_APPEND);         return new Output(os);     }      /**     * 从应用的私有目录files读取文件。如:readFile("test.txt");     */     public Input readFile(String fileName)throws IOException {         InputStream is = context.openFileInput(fileName);         return new Input(is);     }     /**     * 将一个输入流中的内容写入到SD卡上生成文件     *      * @param path     *            文件目录     * @param fileName     *            文件名     * @param inputStream     *            字节输入流     * @return得到的文件     */     public File writeToSDCard(String path, String fileName,             InputStream inputStream) {         File file = null;         OutputStream output = null;         try{             createSDDir(path);             file = createSDFile(path + fileName);             output = new FileOutputStream(file);             byte buffer [] =new byte[4 * 1024];             while((inputStream.read(buffer)) != -1){                 output.write(buffer);             }             output.flush();         }         catch(Exception e){             e.printStackTrace();         }         finally{             try{                 output.close();             }             catch(Exception e){                 e.printStackTrace();             }         }         return file;     }     /**     * 删除一个文件     *      * @param file     * @return     */     public boolean delFile(File file) {         if (file.isDirectory())             return false;         return file.delete();     }       /**     * 删除一个目录(可以是非空目录)     *      * @param dir     */     public boolean delDir(File dir) {         if (dir ==null || !dir.exists() || dir.isFile()) {             return false;         }         for (File file : dir.listFiles()) {             if (file.isFile()) {                 file.delete();             }             else if (file.isDirectory()) {                 delDir(file);//递归             }         }         dir.delete();         return true;     }          /**     * 拷贝一个文件,srcFile源文件,destFile目标文件     *      * @param path     * @throws IOException     */     public boolean copyFileTo(File srcFile, File destFile)throws IOException {         if (srcFile.isDirectory() || destFile.isDirectory())             return false;//判断是否是文件         FileInputStream fis = new FileInputStream(srcFile);         FileOutputStream fos = new FileOutputStream(destFile);         int readLen = 0;         byte[] buf =new byte[1024];         while ((readLen = fis.read(buf)) != -1) {             fos.write(buf, 0, readLen);         }         fos.flush();         fos.close();         fis.close();         return true;     }         /**     * 拷贝目录下的所有文件到指定目录     *      * @param srcDir     * @param destDir     * @return     * @throws IOException     */     public boolean copyFilesTo(File srcDir, File destDir)throws IOException {         if (!srcDir.isDirectory() || !destDir.isDirectory())             return false;//判断是否是目录         if (!destDir.exists())             return false;//判断目标目录是否存在         File[] srcFiles = srcDir.listFiles();         for (int i = 0; i < srcFiles.length; i++) {             if (srcFiles[i].isFile()) {                 //获得目标文件                 File destFile = new File(destDir.getPath() + File.separator                          + srcFiles[i].getName());                 copyFileTo(srcFiles[i], destFile);             }             else if (srcFiles[i].isDirectory()) {                 File theDestDir =new File(destDir.getPath() + File.separator                         + srcFiles[i].getName());                 copyFilesTo(srcFiles[i], theDestDir);             }         }         return true;     }         /**     * 移动一个文件     *      * @param srcFile     * @param destFile     * @return     * @throws IOException     */     public boolean moveFileTo(File srcFile, File destFile)throws IOException {         boolean iscopy = copyFileTo(srcFile, destFile);          if (!iscopy)             return false;         delFile(srcFile);         return true;     }         /**     * 移动目录下的所有文件到指定目录     *      * @param srcDir     * @param destDir     * @return     * @throws IOException     */     public boolean moveFilesTo(File srcDir, File destDir)throws IOException {         if (!srcDir.isDirectory() || !destDir.isDirectory()) {             return false;         }         File[] srcDirFiles = srcDir.listFiles();         for (int i = 0; i < srcDirFiles.length; i++) {             if (srcDirFiles[i].isFile()) {                 File oneDestFile =new File(destDir.getPath() + File.separator                        + srcDirFiles[i].getName());                 moveFileTo(srcDirFiles[i], oneDestFile);                 delFile(srcDirFiles[i]);             }             else if (srcDirFiles[i].isDirectory()) {                 File oneDestFile =new File(destDir.getPath() + File.separator                         + srcDirFiles[i].getName());                 moveFilesTo(srcDirFiles[i], oneDestFile);                 delDir(srcDirFiles[i]);             }          }         return true;     } }


 


 

原创粉丝点击