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; } }
- android fileheper文件操作类
- Android 操作文件类
- Android , Java 文件操作类
- Android文件操作工具类
- Android 文件操作工具类
- Android文件操作工具类
- Android 文件操作工具类
- Android文件操作工具类
- android文件操作工具类
- Android 文件操作帮助类FileUtils文件
- 【Android】文件操作工具类(FileUtil.java)
- Android编码文件操作相关工具类
- android的文件操作
- Android: JAVA 文件操作
- android的文件操作
- android 文件操作
- android--ZIP文件操作
- Android 文件操作
- 使用Intel的虚拟化技术(vt-x)加速Android模拟器
- 黑马程序员——java编程那些事儿____java基础(三) 数组
- VC2010 MSDN的查看方法
- Perl Test::Unit::Lite
- 模态和非模态的区别
- android fileheper文件操作类
- Hash(code and explaination)
- 今天正式CSDN
- libusb-win32介绍
- 2013 0317
- linux shell ----test commond or [expr]
- ajax开发框架和XMLhttpRequest、responseText、responseXml和JSON的应用
- 策略设计模式--学习笔记
- linux sendmail 总结