栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

值得分享的超全文件工具类FileUtil

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

值得分享的超全文件工具类FileUtil

结合以前的项目开发中遇到的不同的文件操作,在这里基本上提取出了所遇到过的文件操作的工具类。

1 我项目中用到的文件工具类

1 读取raw文件、file文件,drawable文件,asset文件,比如本地的json数据,本地文本等;
如:String result =FileUtil.getString(context,”raw://first.json”)
2 读取本地的property文件,并转化为hashMap类型的数据 (simpleProperty2HashMap);
3 将raw文件拷贝到指定目录(copyRawFile);
4 基本文件读写操作(readFile,writeFile);
5 从文件的完整路径名(路径+文件名)中提取 路径(extractFilePath);
6 从文件的完整路径名(路径+文件名)中提取文件名(包含扩展名)
如:d:pathfile.ext –> file.ext(extractFileName)
7 检查指定文件的路径是否存在(pathExists)
8 检查制定文件是否存在(fileExists)
9 创建目录(makeDir)
10 移除字符串中的BOM前缀(removeBomHeaderIfExists)

package com.nsu.edu.library.utils;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.text.TextUtils;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;


public class FileUtil {
 public static final String ASSETS_PREFIX = "file://android_assets/";
 public static final String ASSETS_PREFIX2 = "file://android_asset/";
 public static final String ASSETS_PREFIX3 = "assets://";
 public static final String ASSETS_PREFIX4 = "asset://";
 public static final String RAW_PREFIX = "file://android_raw/";
 public static final String RAW_PREFIX2 = "raw://";
 public static final String FILE_PREFIX = "file://";
 public static final String DRAWABLE_PREFIX = "drawable://";

 public static InputStream getStream(Context context, String url) throws IOException {
  String lowerUrl = url.toLowerCase();
  InputStream is;
  if (lowerUrl.startsWith(ASSETS_PREFIX)) {
   String assetPath = url.substring(ASSETS_PREFIX.length());
   is = getAssetsStream(context, assetPath);
  } else if (lowerUrl.startsWith(ASSETS_PREFIX2)) {
   String assetPath = url.substring(ASSETS_PREFIX2.length());
   is = getAssetsStream(context, assetPath);
  } else if (lowerUrl.startsWith(ASSETS_PREFIX3)) {
   String assetPath = url.substring(ASSETS_PREFIX3.length());
   is = getAssetsStream(context, assetPath);
  } else if (lowerUrl.startsWith(ASSETS_PREFIX4)) {
   String assetPath = url.substring(ASSETS_PREFIX4.length());
   is = getAssetsStream(context, assetPath);
  } else if (lowerUrl.startsWith(RAW_PREFIX)) {
   String rawName = url.substring(RAW_PREFIX.length());
   is = getRawStream(context, rawName);
  } else if (lowerUrl.startsWith(RAW_PREFIX2)) {
   String rawName = url.substring(RAW_PREFIX2.length());
   is = getRawStream(context, rawName);
  } else if (lowerUrl.startsWith(FILE_PREFIX)) {
   String filePath = url.substring(FILE_PREFIX.length());
   is = getFileStream(filePath);
  } else if (lowerUrl.startsWith(DRAWABLE_PREFIX)) {
   String drawableName = url.substring(DRAWABLE_PREFIX.length());
   is = getDrawableStream(context, drawableName);
  } else {
   throw new IllegalArgumentException(String.format("Unsupported url: %s n" +
     "Supported: n%sxxxn%sxxxn%sxxx", url, ASSETS_PREFIX, RAW_PREFIX, FILE_PREFIX));
  }
  return is;
 }

 private static InputStream getAssetsStream(Context context, String path) throws IOException {
  return context.getAssets().open(path);
 }

 private static InputStream getFileStream(String path) throws IOException {
  return new FileInputStream(path);
 }

 private static InputStream getRawStream(Context context, String rawName) throws IOException {
  int id = context.getResources().getIdentifier(rawName, "raw", context.getPackageName());
  if (id != 0) {
   try {
    return context.getResources().openRawResource(id);
   } catch (Exception e) {
    e.printStackTrace();
   }
  }

  throw new IOException(String.format("raw of id: %s from %s not found", id, rawName));
 }

 private static InputStream getDrawableStream(Context context, String rawName) throws IOException {
  int id = context.getResources().getIdentifier(rawName, "drawable", context.getPackageName());
  if (id != 0) {
   BitmapDrawable drawable = (BitmapDrawable) context.getResources().getDrawable(id);
   Bitmap bitmap = drawable.getBitmap();

   ByteArrayOutputStream os = new ByteArrayOutputStream();
   bitmap.compress(Bitmap.CompressFormat.PNG, 0, os);
   return new ByteArrayInputStream(os.toByteArray());
  }

  throw new IOException(String.format("bitmap of id: %s from %s not found", id, rawName));
 }

 public static String getString(Context context, String url) throws IOException {
  return getString(context, url, "UTF-8");
 }

 public static String getString(Context context, String url, String encoding) throws IOException {
  String result = readStreamString(getStream(context, url), encoding);
  if (result.startsWith("ufeff")) {
   result = result.substring(1);
  }

  return result;
 }

 public static String readStreamString(InputStream is, String encoding) throws IOException {
  return new String(readStream(is), encoding);
 }

 public static byte[] readStream(InputStream is) throws IOException {
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  byte[] buf = new byte[1024 * 10];
  int readlen;
  while ((readlen = is.read(buf)) >= 0) {
   baos.write(buf, 0, readlen);
  }
  baos.close();

  return baos.toByteArray();
 }

 public static Bitmap getDrawableBitmap(Context context, String rawName) {
  int id = context.getResources().getIdentifier(rawName, "drawable", context.getPackageName());
  if (id != 0) {
   BitmapDrawable drawable = (BitmapDrawable) context.getResources().getDrawable(id);
   if (drawable != null) {
    return drawable.getBitmap();
   }
  }

  return null;
 }

 
 public static HashMap simpleProperty2HashMap(Context context, String path) {
  try {
   InputStream is = getStream(context, path);
   return simpleProperty2HashMap(is);
  } catch (IOException e) {
   e.printStackTrace();
  }

  return new HashMap();
 }

 private static HashMap simpleProperty2HashMap(InputStream in) throws IOException {
  HashMap hashMap = new HashMap();
  Properties properties = new Properties();
  properties.load(in);
  in.close();
  Set keyValue = properties.keySet();
  for (Iterator it = keyValue.iterator(); it.hasNext(); ) {
   String key = (String) it.next();
   hashMap.put(key, (String) properties.get(key));
  }

  return hashMap;
 }

 
 public static void copyRawFile(Context ctx, String rawFileName, String to) {
  String[] names = rawFileName.split("\.");
  String toFile = to + "/" + names[0] + "." + names[1];
  File file = new File(toFile);
  if (file.exists()) {
   return;
  }
  try {
   InputStream is = getStream(ctx, "raw://" + names[0]);
   OutputStream os = new FileOutputStream(toFile);
   int byteCount = 0;
   byte[] bytes = new byte[1024];

   while ((byteCount = is.read(bytes)) != -1) {
    os.write(bytes, 0, byteCount);
   }
   os.close();
   is.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 
 public static String FILE_READING_ENCODING = "UTF-8";
 public static String FILE_WRITING_ENCODING = "UTF-8";

 public static String readFile(String _sFileName, String _sEncoding) throws Exception {
  StringBuffer buffContent = null;
  String sLine;

  FileInputStream fis = null;
  BufferedReader buffReader = null;
  if (_sEncoding == null || "".equals(_sEncoding)) {
   _sEncoding = FILE_READING_ENCODING;
  }

  try {
   fis = new FileInputStream(_sFileName);
   buffReader = new BufferedReader(new InputStreamReader(fis,
     _sEncoding));
   boolean zFirstLine = "UTF-8".equalsIgnoreCase(_sEncoding);
   while ((sLine = buffReader.readLine()) != null) {
    if (buffContent == null) {
     buffContent = new StringBuffer();
    } else {
     buffContent.append("n");
    }
    if (zFirstLine) {
     sLine = removeBomHeaderIfExists(sLine);
     zFirstLine = false;
    }
    buffContent.append(sLine);
   }// end while
   return (buffContent == null ? "" : buffContent.toString());
  } catch (FileNotFoundException ex) {
   throw new Exception("要读取的文件没有找到!", ex);
  } catch (IOException ex) {
   throw new Exception("读取文件时错误!", ex);
  } finally {
   // 增加异常时资源的释放
   try {
    if (buffReader != null)
     buffReader.close();
    if (fis != null)
     fis.close();
   } catch (Exception ex) {
    ex.printStackTrace();
   }
  }
 }

 public static File writeFile(InputStream is, String path, boolean isOverride) throws Exception {
  String sPath = extractFilePath(path);
  if (!pathExists(sPath)) {
   makeDir(sPath, true);
  }

  if (!isOverride && fileExists(path)) {
   if(path.contains(".")) {
    String suffix = path.substring(path.lastIndexOf("."));
    String pre = path.substring(0, path.lastIndexOf("."));
    path = pre + "_" + TimeUtils.getNowTime() + suffix;
   } else {
    path = path + "_" + TimeUtils.getNowTime();
   }
  }

  FileOutputStream os = null;
  File file = null;

  try {
   file = new File(path);
   os = new FileOutputStream(file);
   int byteCount = 0;
   byte[] bytes = new byte[1024];

   while ((byteCount = is.read(bytes)) != -1) {
    os.write(bytes, 0, byteCount);
   }
   os.flush();

   return file;
  } catch (Exception e) {
   e.printStackTrace();
   throw new Exception("写文件错误", e);
  } finally {
   try {
    if (os != null)
     os.close();
    if (is != null)
     is.close();
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
 }

 public static File writeFile(String path, String content, String encoding, boolean isOverride) throws Exception {
  if (TextUtils.isEmpty(encoding)) {
   encoding = FILE_WRITING_ENCODING;
  }
  InputStream is = new ByteArrayInputStream(content.getBytes(encoding));
  return writeFile(is, path, isOverride);
 }

 
 public static String extractFilePath(String _sFilePathName) {
  int nPos = _sFilePathName.lastIndexOf('/');
  if (nPos < 0) {
   nPos = _sFilePathName.lastIndexOf('\');
  }

  return (nPos >= 0 ? _sFilePathName.substring(0, nPos + 1) : "");
 }

 
 public static String extractFileName(String _sFilePathName) {
  return extractFileName(_sFilePathName, File.separator);
 }

 
 public static String extractFileName(String _sFilePathName,
    String _sFileSeparator) {
  int nPos = -1;
  if (_sFileSeparator == null) {
   nPos = _sFilePathName.lastIndexOf(File.separatorChar);
   if (nPos < 0) {
    nPos = _sFilePathName
      .lastIndexOf(File.separatorChar == '/' ? '\' : '/');
   }
  } else {
   nPos = _sFilePathName.lastIndexOf(_sFileSeparator);
  }

  if (nPos < 0) {
   return _sFilePathName;
  }

  return _sFilePathName.substring(nPos + 1);
 }

 
 public static boolean pathExists(String _sPathFileName) {
  String sPath = extractFilePath(_sPathFileName);
  return fileExists(sPath);
 }

 public static boolean fileExists(String _sPathFileName) {
  File file = new File(_sPathFileName);
  return file.exists();
 }

 
 public static boolean makeDir(String _sDir, boolean _bCreateParentDir) {
  boolean zResult = false;
  File file = new File(_sDir);
  if (_bCreateParentDir)
   zResult = file.mkdirs(); // 如果父目录不存在,则创建所有必需的父目录
  else
   zResult = file.mkdir(); // 如果父目录不存在,不做处理
  if (!zResult)
   zResult = file.exists();
  return zResult;
 }

 
 private static String removeBomHeaderIfExists(String _sLine) {
  if (_sLine == null) {
   return null;
  }
  String line = _sLine;
  if (line.length() > 0) {
   char ch = line.charAt(0);
   // 使用while是因为用一些工具看到过某些文件前几个字节都是0xfffe.
   // 0xfeff,0xfffe是字节序的不同处理.JVM中,一般是0xfeff
   while ((ch == 0xfeff || ch == 0xfffe)) {
    line = line.substring(1);
    if (line.length() == 0) {
     break;
    }
    ch = line.charAt(0);
   }
  }
  return line;
 }

}

2 网上的工具类

这个工具类也大同小异。其中也有很多和我上面重复的一些方法,也有上面没有的方法。转自Trinea的android-common项目。这里直接贴出来,不做任何更改。希望能对看到的人有帮助。也做一个笔记。

package com.nsu.edu.library.utils;

import android.text.TextUtils;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;


public class FileUtils {

 public final static String FILE_EXTENSION_SEPARATOR = ".";

 private FileUtils() {
  throw new AssertionError();
 }

 
 public static StringBuilder readFile(String filePath, String charsetName) {
  File file = new File(filePath);
  StringBuilder fileContent = new StringBuilder("");
  if (file == null || !file.isFile()) {
   return null;
  }

  BufferedReader reader = null;
  try {
   InputStreamReader is = new InputStreamReader(new FileInputStream(file), charsetName);
   reader = new BufferedReader(is);
   String line = null;
   while ((line = reader.readLine()) != null) {
    if (!fileContent.toString().equals("")) {
     fileContent.append("rn");
    }
    fileContent.append(line);
   }
   return fileContent;
  } catch (IOException e) {
   throw new RuntimeException("IOException occurred. ", e);
  } finally {
   IOUtils.close(reader);
  }
 }

 
 public static boolean writeFile(String filePath, String content, boolean append) {
  if (StringUtils.isEmpty(content)) {
   return false;
  }

  FileWriter fileWriter = null;
  try {
   makeDirs(filePath);
   fileWriter = new FileWriter(filePath, append);
   fileWriter.write(content);
   return true;
  } catch (IOException e) {
   throw new RuntimeException("IOException occurred. ", e);
  } finally {
   IOUtils.close(fileWriter);
  }
 }

 
 public static boolean writeFile(String filePath, List contentList, boolean append) {
  if (ListUtils.isEmpty(contentList)) {
   return false;
  }

  FileWriter fileWriter = null;
  try {
   makeDirs(filePath);
   fileWriter = new FileWriter(filePath, append);
   int i = 0;
   for (String line : contentList) {
    if (i++ > 0) {
     fileWriter.write("rn");
    }
    fileWriter.write(line);
   }
   return true;
  } catch (IOException e) {
   throw new RuntimeException("IOException occurred. ", e);
  } finally {
   IOUtils.close(fileWriter);
  }
 }

 
 public static boolean writeFile(String filePath, String content) {
  return writeFile(filePath, content, false);
 }

 
 public static boolean writeFile(String filePath, List contentList) {
  return writeFile(filePath, contentList, false);
 }

 
 public static boolean writeFile(String filePath, InputStream stream) {
  return writeFile(filePath, stream, false);
 }

 
 public static boolean writeFile(String filePath, InputStream stream, boolean append) {
  return writeFile(filePath != null ? new File(filePath) : null, stream, append);
 }

 
 public static boolean writeFile(File file, InputStream stream) {
  return writeFile(file, stream, false);
 }

 
 public static boolean writeFile(File file, InputStream stream, boolean append) {
  OutputStream o = null;
  try {
   makeDirs(file.getAbsolutePath());
   o = new FileOutputStream(file, append);
   byte data[] = new byte[1024];
   int length = -1;
   while ((length = stream.read(data)) != -1) {
    o.write(data, 0, length);
   }
   o.flush();
   return true;
  } catch (FileNotFoundException e) {
   throw new RuntimeException("FileNotFoundException occurred. ", e);
  } catch (IOException e) {
   throw new RuntimeException("IOException occurred. ", e);
  } finally {
   IOUtils.close(o);
   IOUtils.close(stream);
  }
 }

 
 public static void moveFile(String sourceFilePath, String destFilePath) {
  if (TextUtils.isEmpty(sourceFilePath) || TextUtils.isEmpty(destFilePath)) {
   throw new RuntimeException("Both sourceFilePath and destFilePath cannot be null.");
  }
  moveFile(new File(sourceFilePath), new File(destFilePath));
 }

 
 public static void moveFile(File srcFile, File destFile) {
  boolean rename = srcFile.renameTo(destFile);
  if (!rename) {
   copyFile(srcFile.getAbsolutePath(), destFile.getAbsolutePath());
   deleteFile(srcFile.getAbsolutePath());
  }
 }

 
 public static boolean copyFile(String sourceFilePath, String destFilePath) {
  InputStream inputStream = null;
  try {
   inputStream = new FileInputStream(sourceFilePath);
  } catch (FileNotFoundException e) {
   throw new RuntimeException("FileNotFoundException occurred. ", e);
  }
  return writeFile(destFilePath, inputStream);
 }

 
 public static List readFileToList(String filePath, String charsetName) {
  File file = new File(filePath);
  List fileContent = new ArrayList();
  if (file == null || !file.isFile()) {
   return null;
  }

  BufferedReader reader = null;
  try {
   InputStreamReader is = new InputStreamReader(new FileInputStream(file), charsetName);
   reader = new BufferedReader(is);
   String line = null;
   while ((line = reader.readLine()) != null) {
    fileContent.add(line);
   }
   return fileContent;
  } catch (IOException e) {
   throw new RuntimeException("IOException occurred. ", e);
  } finally {
   IOUtils.close(reader);
  }
 }

 
 public static String getFileNameWithoutExtension(String filePath) {
  if (StringUtils.isEmpty(filePath)) {
   return filePath;
  }

  int extenPosi = filePath.lastIndexOf(FILE_EXTENSION_SEPARATOR);
  int filePosi = filePath.lastIndexOf(File.separator);
  if (filePosi == -1) {
   return (extenPosi == -1 ? filePath : filePath.substring(0, extenPosi));
  }
  if (extenPosi == -1) {
   return filePath.substring(filePosi + 1);
  }
  return (filePosi < extenPosi ? filePath.substring(filePosi + 1, extenPosi) : filePath.substring(filePosi + 1));
 }

 
 public static String getFileName(String filePath) {
  if (StringUtils.isEmpty(filePath)) {
   return filePath;
  }

  int filePosi = filePath.lastIndexOf(File.separator);
  return (filePosi == -1) ? filePath : filePath.substring(filePosi + 1);
 }

 
 public static String getFolderName(String filePath) {

  if (StringUtils.isEmpty(filePath)) {
   return filePath;
  }

  int filePosi = filePath.lastIndexOf(File.separator);
  return (filePosi == -1) ? "" : filePath.substring(0, filePosi);
 }

 
 public static String getFileExtension(String filePath) {
  if (StringUtils.isBlank(filePath)) {
   return filePath;
  }

  int extenPosi = filePath.lastIndexOf(FILE_EXTENSION_SEPARATOR);
  int filePosi = filePath.lastIndexOf(File.separator);
  if (extenPosi == -1) {
   return "";
  }
  return (filePosi >= extenPosi) ? "" : filePath.substring(extenPosi + 1);
 }

 
 public static boolean makeDirs(String filePath) {
  String folderName = getFolderName(filePath);
  if (StringUtils.isEmpty(folderName)) {
   return false;
  }

  File folder = new File(folderName);
  return (folder.exists() && folder.isDirectory()) ? true : folder.mkdirs();
 }

 
 public static boolean makeFolders(String filePath) {
  return makeDirs(filePath);
 }

 
 public static boolean isFileExist(String filePath) {
  if (StringUtils.isBlank(filePath)) {
   return false;
  }

  File file = new File(filePath);
  return (file.exists() && file.isFile());
 }

 
 public static boolean isFolderExist(String directoryPath) {
  if (StringUtils.isBlank(directoryPath)) {
   return false;
  }

  File dire = new File(directoryPath);
  return (dire.exists() && dire.isDirectory());
 }

 
 public static boolean deleteFile(String path) {
  if (StringUtils.isBlank(path)) {
   return true;
  }

  File file = new File(path);
  if (!file.exists()) {
   return true;
  }
  if (file.isFile()) {
   return file.delete();
  }
  if (!file.isDirectory()) {
   return false;
  }
  for (File f : file.listFiles()) {
   if (f.isFile()) {
    f.delete();
   } else if (f.isDirectory()) {
    deleteFile(f.getAbsolutePath());
   }
  }
  return file.delete();
 }

 
 public static long getFileSize(String path) {
  if (StringUtils.isBlank(path)) {
   return -1;
  }

  File file = new File(path);
  return (file.exists() && file.isFile() ? file.length() : -1);
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/137112.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号