package com.sunzee.utils; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.text.TextUtils; import android.util.Log; import com.sunzee.model.domain.Name; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.io.RandomAccessFile; import java.net.FileNameMap; import java.net.URLConnection; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; /** * @Description 文件工具类 */ public class FileUtil { public static String FILEPATH = "/storage/emulated/0/logdata/"; public static final long SEVENT_DAYS = 604800000; private static String TAG = "FileUtil"; /** * 获取指定目录内所有文件路径 * * @param dirPath 需要查询的文件目录 * @param _type 查询类型,比如mp3 */ public static File[] getAllFiles(String dirPath, String _type) { File f = new File(dirPath); if (!f.exists()) {//判断路径是否存在 if (f.mkdir()) { getAllFiles(dirPath, _type); } return null; } File[] files = f.listFiles(); if (files == null) {//判断权限 return null; } for (File _file : files) {//遍历目录 String _name = _file.getName(); String filePath = _file.getAbsolutePath();//获取文件路径 String fileName = _file.getName().substring(0, _name.length() - 4);//获取文件名 Log.d("LOGCAT", "fileName:" + fileName); Log.d("LOGCAT", "FILEPATH:" + filePath); } return files; } /** * 判断文件是否为图片 * * @param filePath 路径 * @return */ public static boolean isImageFile(String filePath) { BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(filePath, options); if (options.outWidth == -1) { return false; } return true; } private final static String PREFIX_VIDEO = "video/"; /** * Get the Mime Type from a File * * @param fileName 文件名 * @return 返回MIME类型 * thx https://www.oschina.net/question/571282_223549 * add by fengwenhua 2017年5月3日09:55:01 */ private static String getMimeType(String fileName) { FileNameMap fileNameMap = URLConnection.getFileNameMap(); String type = fileNameMap.getContentTypeFor(fileName); return type; } /** * 根据文件后缀名判断 文件是否是视频文件 * * @param fileName 文件名 * @return 是否是视频文件 */ public static boolean isVedioFile(String fileName) { String mimeType = getMimeType(fileName); if (!TextUtils.isEmpty(fileName) && mimeType.contains(PREFIX_VIDEO)) { return true; } return false; } public static String getDeviceId() { String deviceId = ""; File file = new File("/storage/emulated/0/mht/deviceid.txt"); String fileContent = getFileContent(file); if (file != null && !TextUtils.isEmpty(fileContent)) { //如果存在 直接获取 Log.e(TAG, "getDeviceId: " + fileContent); deviceId = fileContent.trim(); } else { //不存在 先生成再获取 writeData(); deviceId = getFileContent(file).trim(); } int param = (int) SharedPreferencesUtils.getParam(Name.CONNECT_STATE, 10); if (param == 2) { return deviceId; } else { return ""; } } private static void writeData() { String filePath = "/storage/emulated/0/mht/"; String fileName = "deviceid.txt"; String deviceId = ""; long l = System.currentTimeMillis(); Random random = new Random(); String randomText = ""; for (int i = 0; i < 4; i++) { int j = random.nextInt(1000); randomText = randomText + j; } deviceId = String.valueOf(l) + randomText; writeTxtToFile(deviceId, filePath, fileName); } // 将字符串写入到文本文件中 private static void writeTxtToFile(String strcontent, String filePath, String fileName) { //生成文件夹之后,再生成文件,不然会出错 makeFilePath(filePath, fileName); String strFilePath = filePath + fileName; // 每次写入时,都换行写 String strContent = strcontent + "\r\n"; try { File file = new File(strFilePath); if (!file.exists()) { Log.d("TestFile", "Create the file:" + strFilePath); file.getParentFile().mkdirs(); file.createNewFile(); } RandomAccessFile raf = new RandomAccessFile(file, "rwd"); raf.seek(file.length()); raf.write(strContent.getBytes()); raf.close(); } catch (Exception e) { Log.e("TestFile", "Error on write File:" + e); } } //生成文件 private static File makeFilePath(String filePath, String fileName) { File file = null; makeRootDirectory(filePath); try { file = new File(filePath + fileName); if (!file.exists()) { file.createNewFile(); } } catch (Exception e) { e.printStackTrace(); } return file; } //生成文件夹 private static void makeRootDirectory(String filePath) { File file = null; try { file = new File(filePath); if (!file.exists()) { file.mkdir(); } } catch (Exception e) { Log.i("error:", e + ""); } } //读取指定目录下的所有TXT文件的文件内容 private static String getFileContent(File file) { String content = ""; if (!file.isDirectory()) { //检查此路径名的文件是否是一个目录(文件夹) if (file.getName().endsWith("txt")) {//文件格式为""文件 BufferedReader buffreader = null; try { buffreader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8")); String line = ""; //分行读取 while ((line = buffreader.readLine()) != null) { content += line + "\n"; } } catch (java.io.FileNotFoundException e) { Log.d("TestFile", "The File doesn't not exist."); } catch (IOException e) { Log.d("TestFile", e.getMessage()); } finally { try { if (buffreader != null) { buffreader.close();//关闭输入流 } } catch (IOException e) { e.printStackTrace(); } } } } return content; } //flie:要删除的文件夹的所在位置 public static void deleteFile(File file) { if (file.isDirectory()) { File[] files = file.listFiles(); for (int i = 0; i < files.length; i++) { File f = files[i]; deleteFile(f); } // file.delete();//如要保留文件夹,只删除文件,请注释这行 } else if (file.exists()) { file.delete(); } } /** * 获取文件后缀名 * * @param fileName * @return */ public static String getFileType(String fileName) { return fileName.substring(fileName.lastIndexOf(".") + 1); } public static Bitmap getLoacalBitmap(String url) { FileInputStream fis = null; try { fis = new FileInputStream(url); return BitmapFactory.decodeStream(fis); ///把流转化为Bitmap图片 } catch (FileNotFoundException e) { e.printStackTrace(); return null; } finally { if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 删除超过7天的log文件 */ public static void pastDueLog() { File logFolder = new File(FILEPATH); if (logFolder.exists()) { File[] logFiles = logFolder.listFiles(); for (File file : logFiles) { SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); String nowDate = format.format(new Date(System.currentTimeMillis())); //Log.d(TAG, "duibi: " + nowDate); try { String replace = file.getName().replace("-" + FileUtil.getDeviceId() + ".txt", ""); Log.d(TAG, "pastDueLog: " + replace); Date dateFile = format.parse(replace); Date dataNow = format.parse(nowDate); long fileTime = dateFile.getTime(); long nowTime = dataNow.getTime(); if (nowTime - fileTime > SEVENT_DAYS) { //如果超过7天,我们就进行删除指定的文件,否则就什么都不做。 //Log.d(TAG, "duibi: "+fileTime); //删除 file.delete(); } //Log.d(TAG, "duibi: "+dataNow); //Log.d(TAG, "duibi: " + file.getName()); } catch (ParseException e) { //604800000 7天 e.printStackTrace(); } } } } /** * 获取当前时间 * * @return */ public static String getFileName() { SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); String date = format.format(new Date(System.currentTimeMillis())) + "-" + FileUtil.getDeviceId() + ".txt"; return date; } /** * 創建log文件 */ public static File createLogFile() { return makeFilePath(FILEPATH, FileUtil.getFileName()); } }