java中关于文件操作常用工具类

简介:


import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.io.*;
import java.util.regex.Pattern;

public class FileUtil {
 private static final Log LOG = LogFactory.getLog(FileUtil.class);

 public static boolean delete(String f) {
  try {
   File file = new File(f);
   file.delete();
   return true;
  } catch (Exception e) {
   LOG.error("delete(String) String f:" + "f", e);
   return false;
  }
 }

 public static String read(String file) {
  String ret = null;

  File f = null;
  BufferedInputStream result = null;
  ByteArrayOutputStream baos = null;

  try {
   f = new File(file);
   if (!f.exists()) {
    if (LOG.isDebugEnabled()) {
     LOG.debug(file + " does not exist.");
    }
    return ret;
   } else if (!f.isFile()) {
    // fix bug:判断是否是文件,如果是一个目录是很危险的
    LOG.warn(file + " is not a file.");
    return ret;
   }
   result = new BufferedInputStream(new FileInputStream(f));
   baos = new ByteArrayOutputStream();
   byte[] cont = new byte[1024];
   int conlen;
   while ((conlen = result.read(cont)) >= 0) {
    baos.write(cont, 0, conlen);
   }
   ret = new String(baos.toByteArray());
  } catch (Exception e) {
   LOG.error("read(String)  file:" + file, e);
  } finally {
   try {
    if (result != null)
     result.close();
    if (baos != null)
     baos.close();
    f = null;
   } catch (Exception e) {
    LOG.error("read finally ", e);
   }
  }
  return ret;
 }
 public static byte[] readBytes(String file) {
  byte[] ret = null;

  File f = null;
  BufferedInputStream result = null;
  ByteArrayOutputStream baos = null;

  try {
   f = new File(file);
   if (!f.exists()) {
    if (LOG.isDebugEnabled()) {
     LOG.debug(file + " does not exist.");
    }
    return ret;
   } else if (!f.isFile()) {
    // fix bug:判断是否是文件,如果是一个目录是很危险的
    LOG.warn(file + " is not a file.");
    return ret;
   }
   result = new BufferedInputStream(new FileInputStream(f));
   baos = new ByteArrayOutputStream();
   byte[] cont = new byte[1024];
   int conlen;
   while ((conlen = result.read(cont)) >= 0) {
    baos.write(cont, 0, conlen);
   }
   ret = (baos.toByteArray());
  } catch (Exception e) {
   LOG.error("read(String)  file:" + file, e);
  } finally {
   try {
    if (result != null)
     result.close();
    if (baos != null)
     baos.close();
    f = null;
   } catch (Exception e) {
    LOG.error("read finally ", e);
   }
  }
  return ret;
 }

 public static boolean write(String content, String file) {
  try {
   return write(content, file, false);
  } catch (Exception e) {
   LOG.error("write(String,String)  file=" + file + "   ", e);
   return false;
  }
 }

 public static boolean write(byte[] content, String file) {
  boolean ret = false;

  FileOutputStream fos = null;
  try {
   File filedir = new File(getPath(file));
   if (!filedir.exists())
    filedir.mkdirs();
   fos = new FileOutputStream(file);
   fos.write(content);
   ret = true;
  } catch (Exception e) {
   LOG.error("write(byte,String) file=" + file, e);
  } finally {
   try {
    if (fos != null)
     fos.close();
   } catch (Exception e) {
    LOG.error(e);
   }
  }
  return ret;
 }

 public static boolean write(String content, String file, boolean append) {
  boolean ret = false;
  FileOutputStream fos = null;

  try {
   long t1 = System.currentTimeMillis();
   File filedir = new File(getPath(file));
   if (!filedir.exists())
    filedir.mkdirs();
   
   if(append)
    fos = new FileOutputStream(file, append);
   else
    fos = new FileOutputStream(file);
   
   fos.write(content.getBytes());
   long t2 = System.currentTimeMillis();
   ret = true;
  } catch (Exception e) {
   LOG.error("write(String,String,boolean) file=" + file, e);
   return false;
  } finally {
   try {
    if (fos != null)
     fos.close();
   } catch (Exception e) {
    LOG.error(e);
   }
  }
  return ret;
 }

 public static String getPath(String f) {
  try {
   return f.substring(0, f.lastIndexOf("/"));
  } catch (Exception e) {
   return "./";
  }
 }

 public static String[] getFileList(String dir) {
  try {
   File parent = new File(dir);
   if (!parent.isAbsolute() || !parent.isDirectory()) {
    return null;
   }
   return parent.list();
  } catch (Exception e) {
   return null;
  }
 }

 public static String[] getFileList(final String dir, final String pattern) {
  try {

   File parent = new File(dir);
   if (!parent.isAbsolute() || !parent.isDirectory()) {
    return null;
   }
   final Pattern namePattern = Pattern.compile(pattern);
   return parent.list(new FilenameFilter() {
    public boolean accept(File dir, String name) {
     if (namePattern.matcher(name).matches()) {
      return true;
     } else {
      return false;
     }
    }
   });

  } catch (Throwable te) {
   LOG.error("getFileList[dir=" + dir + ",pattern=" + pattern
     + "]error.", te);
   return null;
  }
 }

}

目录
相关文章
|
16天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
45 2
|
10天前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
|
27天前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
47 17
|
19天前
|
存储 缓存 安全
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见。本文介绍了使用 `File.createTempFile` 方法和自定义创建临时文件的两种方式,详细探讨了它们的使用场景和注意事项,包括数据缓存、文件上传下载和日志记录等。强调了清理临时文件、确保文件名唯一性和合理设置文件权限的重要性。
43 2
|
19天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
23天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
76 4
|
24天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
45 2
|
28天前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
|
1月前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
37 4
|
1月前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。