最近项目中用到了离线上传下载对文件的增删改查 记录一下。
首先是对文件的压缩和解压缩。因为上传下载都是通过zip文件
package com.chs.ziptext;
import android.graphics.Bitmap;
import android.util.Base64;
import android.util.Log;
import java.io.ByteArrayOutputStream;
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 java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
/**
* 作者:chs on 2017/2/9 19:13
* 邮箱:657083984@qq.com
*/
public class ZipUtil {
private static final int BUFF_SIZE = 1024 * 4;
/**
* 解压缩一个文件
* @param zipFile 压缩文件
* @param folderPath 解压缩的目标目录
* @throws IOException 当解压缩过程出错时抛出
*/
public static void upZipFile(File zipFile, String folderPath) throws ZipException, IOException {
//创建解压目录
File desDir = new File(folderPath);
if (!desDir.exists()) {
desDir.mkdirs();
}
ZipFile zf = new ZipFile(zipFile);
//循环解压
for (Enumeration<?> entries = zf.entries(); entries.hasMoreElements();) {
ZipEntry entry = ((ZipEntry)entries.nextElement());
InputStream in = zf.getInputStream(entry);
//压缩文件和子文件的名字
String str = folderPath + File.separator + entry.getName();
str = new String(str.getBytes("8859_1"), "GB2312");
File desFile = new File(str);
if (!desFile.exists()) {
File fileParentDir = desFile.getParentFile();
if (!fileParentDir.exists()) {
fileParentDir.mkdirs();
}
desFile.createNewFile();
}
OutputStream out = new FileOutputStream(desFile);
byte buffer[] = new byte[BUFF_SIZE];
int realLength;
while ((realLength = in.read(buffer)) > 0) {
out.write(buffer, 0, realLength);
}
in.close();
out.close();
}
}
/**
* 压缩文件,文件夹
* @param srcFileString 要压缩的文件/文件夹名字
* @param zipFileString 指定压缩的目的和名字
* @throws Exception
*/
public static void ZipFolder(String srcFileString, String zipFileString,ZipOutputStream outZip)throws Exception {
//创建Zip包
// ZipOutputStream outZip = new ZipOutputStream(new FileOutputStream(zipFileString));
//打开要输出的文件
File file = new File(srcFileString);
//压缩
ZipFiles(file.getParent()+File.separator, file.getName(), outZip);
//完成,关闭
// outZip.finish();
// outZip.close();
}//end of func
/**
* 压缩文件
* @param folderString
* @param fileString
* @param zipOutputSteam
* @throws Exception
*/
private static void ZipFiles(String folderString, String fileString, ZipOutputStream zipOutputSteam)throws Exception{
if(zipOutputSteam == null)
return;
Log.i("folderString",folderString+">>>>"+fileString);
File file = new File(folderString+fileString);
Log.d("name",file.getName());
//判断是不是文件
if (file.isFile()) {
ZipEntry zipEntry = new ZipEntry(fileString);
FileInputStream inputStream = new FileInputStream(file);
zipOutputSteam.putNextEntry(zipEntry);
int len;
byte[] buffer = new byte[BUFF_SIZE];
while((len=inputStream.read(buffer)) != -1)
{
zipOutputSteam.write(buffer, 0, len);
}
zipOutputSteam.closeEntry();
}
else {
//文件夹的方式,获取文件夹下的子文件
String fileList[] = file.list();
//如果没有子文件, 则添加进去即可
if (fileList.length <= 0) {
ZipEntry zipEntry = new ZipEntry(fileString+File.separator);
zipOutputSteam.putNextEntry(zipEntry);
zipOutputSteam.closeEntry();
}
//如果有子文件, 遍历子文件
for (int i = 0; i < fileList.length; i++) {
ZipFiles(folderString, fileString+File.separator+fileList[i], zipOutputSteam);
}
}
}
/**
* 将bitmap转化成base64 的字符串
* @param bit
* @return
*/
public static String Bitmap2StrByBase64(Bitmap bit){
ByteArrayOutputStream bos=new ByteArrayOutputStream();
bit.compress(Bitmap.CompressFormat.JPEG, 40, bos);//参数100表示不压缩
byte[] bytes=bos.toByteArray();
return Base64.encodeToString(bytes, Base64.DEFAULT);
}
}
将一个json写入txt文件
private void setJson(){
PointJson pointJson = new PointJson("大海","就撒发卡机埃及法阿什顿飞机啊我氨基酸的会发生佛奥发大水发");
Gson gson = new Gson();
String json = gson.toJson(pointJson);
String rootPath = Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"zipdes";
File desDir = new File(rootPath);
if (!desDir.exists()) {
desDir.mkdirs();
}
writeString(json,rootPath,"1.txt");
}
void writeString(String str,String rootPath,String zipName){
String filePath = rootPath+File.separator+zipName;
File desFile = new File(filePath);
if (!desFile.exists()) {
File fileParentDir = desFile.getParentFile();
if (!fileParentDir.exists()) {
fileParentDir.mkdirs();
}
try {
desFile.createNewFile();
FileWriter fileWriter = new FileWriter(desFile);
fileWriter.write(str);
fileWriter.flush();
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
demo: demo地址