/* * Copyright (C) 2014 The AppCan Open Source Project. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ package org.zywx.wbpalmstar.base; import android.content.Context; import android.os.Environment; import android.os.StatFs; import org.zywx.wbpalmstar.acedes.ACEDes; import java.io.*; public class FileHelper { public static final String SDCARD = Environment .getExternalStorageDirectory().getPath(); public static String getSDcardPath() { if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { return SDCARD + "/"; } return null; } /** * 获得SD卡总空间字节数 -1为SD卡不可用 * * @return */ public static long getSDcardTotalSpace() { String sdPath = getSDcardPath(); if (sdPath != null) { StatFs fs = new StatFs(sdPath); return fs.getBlockSize() * fs.getBlockCount(); } else { return -1L; } } /** * 获得SD卡可用字节数 * * @return */ public static long getSDcardFreeSpace() { final String sdPath = getSDcardPath(); if (sdPath != null) { final StatFs fs = new StatFs(sdPath); return 1L * fs.getBlockSize() * fs.getAvailableBlocks(); } else { return -1L; } } /** * delete a file/folder * * @param file the file object want to be deleted * @return true-->deleted success, false-->deleted fail. */ public static boolean deleteFile(File file) { if (file == null) { throw new NullPointerException("file can not be null!"); } boolean isDeleted = false; try { if (file.exists()) {// file exist if (file.isDirectory()) {// is a folder File[] files = file.listFiles(); if (files == null || files.length == 0) {// empty folder isDeleted = file.delete(); files = null; } else {// contain folder or file for (File item : files) { if (!deleteFile(item)) { item = null; break; } item = null; } files = null; isDeleted = file.delete(); file = null; return isDeleted; } } else {// is a file if (file.canWrite()) { isDeleted = file.delete(); } } } else {// file not exist! isDeleted = true; } } catch (SecurityException e) { BDebug.e("FileDao--->deleteFile():", e.getMessage()); isDeleted = false; } return isDeleted; } public byte[] readFile(File file, int buffSize) { byte[] data = null; if (file == null) { throw new NullPointerException("File can not be null.........."); } if (buffSize <= 0) { throw new IllegalArgumentException("buffSize can not less than zero"); } FileInputStream fis = null; ByteArrayOutputStream baos = null; try { fis = new FileInputStream(file); baos = new ByteArrayOutputStream(); byte[] buffer = new byte[buffSize]; int actualSize = 0; while ((actualSize = fis.read(buffer)) != -1) { baos.write(buffer, 0, actualSize); } data = baos.toByteArray(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } if (baos != null) { try { baos.close(); } catch (IOException e) { e.printStackTrace(); } } } return data; } public boolean writeFile(File target, byte[] data) { boolean isSuccessed = false; if (target == null || data == null) { throw new NullPointerException("params can not be null........"); } if (target.isDirectory()) { throw new IllegalArgumentException("target can only be file!..........."); } FileOutputStream fos = null; try { fos = new FileOutputStream(target); fos.write(data); isSuccessed = true; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } return isSuccessed; } public static boolean copyFile(File source, File target) { boolean isSuccessed = false; if (source == null || target == null) { throw new NullPointerException("source file and target file can not be null!......"); } if (source.isDirectory() || target.isDirectory()) { throw new IllegalArgumentException("source and target can only be file.........."); } FileInputStream fis = null; FileOutputStream fos = null; try { fis = new FileInputStream(source); fos = new FileOutputStream(target); int actualSize = 0; byte[] buffer = new byte[getBufferSizeByFileSize(source.length())]; while ((actualSize = fis.read(buffer)) != -1) { fos.write(buffer, 0, actualSize); } buffer = null; isSuccessed = true; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } return isSuccessed; } public static int getBufferSizeByFileSize(long length) { if (length < 0) { throw new IllegalArgumentException("length can not less than zero........."); } if (length == 0) { return 0; } if (length > 104857600) {// 100MB return 1048576;// 1MB } if (length > 1048576) {// 1MB return 327680;// 32K } return 4096;// 4K } public static String loadAssetTextAsString(Context context, String name) { BufferedReader in = null; try { StringBuilder buf = new StringBuilder(); InputStream isTemp = context.getAssets().open(name); InputStream is = context.getAssets().open(name); boolean isEncrypted=ACEDes.isEncrypted(isTemp); if (isEncrypted){ byte[] data = BUtility.transStreamToBytes(is, is.available()); String fileName = BUtility.getFileNameWithNoSuffix(name); return ACEDes.htmlDecode(data, fileName); } in = new BufferedReader(new InputStreamReader(is)); String str; boolean isFirst = true; while ( (str = in.readLine()) != null ) { if (isFirst) isFirst = false; else buf.append('\n'); buf.append(str); } return buf.toString(); } catch (IOException e) { BDebug.e("Error opening asset " + name); } finally { if (in != null) { try { in.close(); } catch (IOException e) { BDebug.e("Error closing asset " + name); } } } return null; } public static String readFile(String fileName) throws IOException { BufferedReader br = new BufferedReader(new FileReader(fileName)); try { StringBuilder sb = new StringBuilder(); String line = br.readLine(); while (line != null) { sb.append(line); sb.append("\n"); line = br.readLine(); } return sb.toString(); } finally { br.close(); } } }