android 文件处理类超完整

FileHelper.java类

package com.east.framework.file;

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) {

this.context = context;

SDPATH = Environment.getExternalStorageDirectory().getPath() + "//";

FILESPATH = this.context.getFilesDir().getPath() + "//";

}

/**判断SDCard是否存在?是否可以进行读写*/

public boolean SDCardState(){

i f(Environment.getExternalStorageState().equals(

Environment.MEDIA_MOUNTED)){//表示SDCard存在并且可以读写return true;

}else{

return false;

}

}

/**获取SDCard文件路径*/

public String SDCardPath(){

i f(SDCardState()){//如果SDCard存在并且可以读写

SDPATH = Environment.getExternalStorageDirectory().getPath();

return SDPATH;

}else{

return null;

}

}

/**获取SDCard 总容量大小(MB)*/

public long SDCardTotal(){

i f(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;

}

}

/**获取SDCard 可用容量大小(MB)*/

public long SDCardFree(){

i f(null != SDCardPath()&&SDCardPath().equals("")){

StatFs statfs = new StatFs(SDCardPath());

//获取SDCard的Block可用数

long availaBlocks = statfs.getAvailableBlocks();

//获取每个block的大小

long blockSize = statfs.getBlockSize();

//计算SDCard 可用容量大小MB

long SDFreeSize = availaBlocks*blockSize/1024/1024;

return SDFreeSize;

}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");

*/

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() + "//"

+ srcFiles[i].getName());

copyFileTo(srcFiles[i], destFile);

} else if (srcFiles[i].isDirectory()) {

File theDestDir = new File(destDir.getPath() + "//" + 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() + "//" + srcDirFiles[i].getName());

moveFileTo(srcDirFiles[i], oneDestFile);

delFile(srcDirFiles[i]);

} else if (srcDirFiles[i].isDirectory()) {

File oneDestFile = new File(destDir.getPath() + "//" + srcDirFiles[i].getName());

moveFilesTo(srcDirFiles[i], oneDestFile);

delDir(srcDirFiles[i]);

}

}

return true;

}

}

Input.java帮助类

package com.sinous.framework.file;

import java.io.ByteArrayOutputStream;

import java.io.EOFException;

import java.io.IOException;

import java.io.InputStream;

import java.io.UTFDataFormatException;

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();

}

public int read() throws IOException {

if (pos >= count || pos >= buf.length) {

pos = 0;

count = in.read(buf, 0, DEFAULT_BUFFER_SIZE);

}

if (pos >= count) {

return -1;

}

return buf[pos++] & 0xff;

}

public int read(byte[] b) throws IOException {

return read(b, 0, b.length);

}

public int read(byte[] b, int off, int len) throws IOException { 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:

/* 110x xxxx 10xx xxxx */

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:

/* 1110 xxxx 10xx xxxx 10xx xxxx */

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:

/* 10xx xxxx, 1111 xxxx */

throw new UTFDataFormatException();

}

}

// The number of chars produced may be less than utflen

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帮助类

package com.sinous.framework.file;

import java.io.IOException;

import java.io.OutputStream;

import java.io.UTFDataFormatException;

public class Output extends OutputStream {

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);

}

相关文档
最新文档