package com.example.song.reactnativeappdemo.hotupdate; import android.content.Context; import android.util.Log; import com.example.song.reactnativeappdemo.constants.FileConstant; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.lang.reflect.Field; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; /** * 文件工具类 * Created by Song on 2017/2/15. */ public class FileUtils { /** * 解压 ZIP 包 */ public static void decompression(String filePath) { try { ZipInputStream inZip = new ZipInputStream(new FileInputStream(FileConstant.JS_PATCH_LOCAL_PATH)); ZipEntry zipEntry; String szName; try { while((zipEntry = inZip.getNextEntry()) != null) { szName = zipEntry.getName(); if(zipEntry.isDirectory()) { szName = szName.substring(0,szName.length()-1); File folder = new File(filePath + File.separator + szName); folder.mkdirs(); }else{ File file1 = new File(filePath + File.separator + szName); file1.createNewFile(); FileOutputStream fos = new FileOutputStream(file1); int len; byte[] buffer = new byte[1024]; while((len = inZip.read(buffer)) != -1) { fos.write(buffer, 0 , len); fos.flush(); } fos.close(); } } } catch (IOException e) { e.printStackTrace(); } inZip.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 获取Assets目录下的bundle文件 * @return */ public static String getJsBundleFromAssets(Context context) { String result = ""; try { InputStream is = context.getAssets().open(FileConstant.JS_BUNDLE_LOCAL_FILE); int size = is.available(); byte[] buffer = new byte[size]; is.read(buffer); is.close(); result = new String(buffer,"UTF-8"); } catch (IOException e) { e.printStackTrace(); } return result; } /** * 解析SD卡下的bundle文件 * @param filePath * @return */ public static String getJsBundleFromSDCard(String filePath) { String result = ""; try { InputStream is = new FileInputStream(filePath); int size = is.available(); byte[] buffer = new byte[size]; is.read(buffer); is.close(); result = new String(buffer,"UTF-8"); } catch (IOException e) { e.printStackTrace(); } return result; } /** * 将.pat文件转换为String * @param patPath 下载的.pat文件所在目录 * @return */ public static String getStringFromPat(String patPath) { FileReader reader = null; String result = ""; try { reader = new FileReader(patPath); int ch = reader.read(); StringBuilder sb = new StringBuilder(); while (ch != -1) { sb.append((char)ch); ch = reader.read(); } reader.close(); result = sb.toString(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return result; } /** * 将图片复制到bundle所在文件夹下的drawable-mdpi * @param srcFilePath * @param destFilePath */ public static void copyPatchImgs(String srcFilePath,String destFilePath) { File root = new File(srcFilePath); File[] files; if(root.exists() && root.listFiles() != null) { files = root.listFiles(); for (File file : files) { File oldFile=new File(srcFilePath+file.getName()); File newFile=new File(destFilePath+file.getName()); DataInputStream dis= null; DataOutputStream dos=null; try { dos=new DataOutputStream(new FileOutputStream(newFile)); dis = new DataInputStream(new FileInputStream(oldFile)); } catch (FileNotFoundException e) { e.printStackTrace(); } int temp; try { while((temp=dis.read())!=-1){ dos.write(temp); } dis.close(); dos.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 遍历删除文件夹下所有文件 * @param filePath */ public static void traversalFile(String filePath) { File file = new File(filePath); if (file.exists()) { File[] files = file.listFiles(); for (File f : files) { if(f.isDirectory()) { traversalFile(f.getAbsolutePath()); } else { f.delete(); } } file.delete(); } } /** * 删除指定File * @param filePath */ public static void deleteFile(String filePath) { File patFile = new File(filePath); if(patFile.exists()) { patFile.delete(); } } }