java 文件处理 工具类

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介: java 文件处理 工具类
package com.fh.util;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileChannel.MapMode;
/**
 * 说明:文件处理
 * 作者:FH Admin
 * from:fhadmin.cn
 */
public class FileUtil {
  /**获取文件大小 返回 KB 保留3位小数  没有文件时返回0
   * @param filepath 文件完整路径,包括文件名
   * @return
   */
  public static Double getFilesize(String filepath){
    File backupath = new File(filepath);
    return Double.valueOf(backupath.length())/1000.000;
  }
  /**
   * 创建目录
   * @param destDirName目标目录名
   * @return 
   */
  public static Boolean createDir(String destDirName) {
    File dir = new File(destDirName);
    if(!dir.getParentFile().exists()){        //判断有没有父路径,就是判断文件整个路径是否存在
      return dir.getParentFile().mkdirs();    //不存在就全部创建
    }
    return false;
  }
  /**
   * 删除文件
   * @param filePathAndName
   *            String 文件路径及名称 如c:/fqf.txt
   * @param fileContent
   *            String
   * @return boolean
   */
  public static void delFile(String filePathAndName) {
    try {
      String filePath = filePathAndName;
      filePath = filePath.toString();
      java.io.File myDelFile = new java.io.File(filePath);
      myDelFile.delete();
    } catch (Exception e) {
      System.out.println("删除文件操作出错");
      e.printStackTrace();
    }
  }
  /**
   * 读取到字节数组0
   * @param filePath //路径
   * @throws IOException
   */
  public static byte[] getContent(String filePath) throws IOException {
    File file = new File(filePath);
    long fileSize = file.length();
    if (fileSize > Integer.MAX_VALUE) {
      System.out.println("file too big...");
      return null;
    }
    FileInputStream fi = new FileInputStream(file);
    byte[] buffer = new byte[(int) fileSize];
    int offset = 0;
    int numRead = 0;
    while (offset < buffer.length
        && (numRead = fi.read(buffer, offset, buffer.length - offset)) >= 0) {
      offset += numRead;
    }
    // 确保所有数据均被读取
    if (offset != buffer.length) {
      throw new IOException("Could not completely read file " + file.getName());
    }
    fi.close();
    return buffer;
  }
  /**
   * 读取到字节数组1
   * 
   * @param filePath
   * @return
   * @throws IOException
   */
  public static byte[] toByteArray(String filePath) throws IOException {
    File f = new File(filePath);
    if (!f.exists()) {
      throw new FileNotFoundException(filePath);
    }
    ByteArrayOutputStream bos = new ByteArrayOutputStream((int) f.length());
    BufferedInputStream in = null;
    try {
      in = new BufferedInputStream(new FileInputStream(f));
      int buf_size = 1024;
      byte[] buffer = new byte[buf_size];
      int len = 0;
      while (-1 != (len = in.read(buffer, 0, buf_size))) {
        bos.write(buffer, 0, len);
      }
      return bos.toByteArray();
    } catch (IOException e) {
      e.printStackTrace();
      throw e;
    } finally {
      try {
        in.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
      bos.close();
    }
  }
  /**
   * 读取到字节数组2
   * 
   * @param filePath
   * @return
   * @throws IOException
   */
  public static byte[] toByteArray2(String filePath) throws IOException {
    File f = new File(filePath);
    if (!f.exists()) {
      throw new FileNotFoundException(filePath);
    }
    FileChannel channel = null;
    FileInputStream fs = null;
    try {
      fs = new FileInputStream(f);
      channel = fs.getChannel();
      ByteBuffer byteBuffer = ByteBuffer.allocate((int) channel.size());
      while ((channel.read(byteBuffer)) > 0) {
        // do nothing
        // System.out.println("reading");
      }
      return byteBuffer.array();
    } catch (IOException e) {
      e.printStackTrace();
      throw e;
    } finally {
      try {
        channel.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
      try {
        fs.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
  /**
   * Mapped File way MappedByteBuffer 可以在处理大文件时,提升性能
   * 
   * @param filename
   * @return
   * @throws IOException
   */
  public static byte[] toByteArray3(String filePath) throws IOException {
    FileChannel fc = null;
    RandomAccessFile rf = null;
    try {
      rf = new RandomAccessFile(filePath, "r");
      fc = rf.getChannel();
      MappedByteBuffer byteBuffer = fc.map(MapMode.READ_ONLY, 0,
          fc.size()).load();
      //System.out.println(byteBuffer.isLoaded());
      byte[] result = new byte[(int) fc.size()];
      if (byteBuffer.remaining() > 0) {
        // System.out.println("remain");
        byteBuffer.get(result, 0, byteBuffer.remaining());
      }
      return result;
    } catch (IOException e) {
      e.printStackTrace();
      throw e;
    } finally {
      try {
        rf.close();
        fc.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
}

 

相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
目录
相关文章
|
7月前
|
人工智能 JSON Java
列表结构与树结构转换分析与工具类封装(java版)
本文介绍了将线性列表转换为树形结构的实现方法及工具类封装。核心思路是先获取所有根节点,将其余节点作为子节点,通过递归构建每个根节点的子节点。关键在于节点需包含 `id`、`parentId` 和 `children` 三个属性。文中提供了两种封装方式:一是基于基类 `BaseTree` 的通用工具类,二是使用函数式接口实现更灵活的方式。推荐使用后者,因其避免了继承限制,更具扩展性。代码示例中使用了 Jackson 库进行 JSON 格式化输出,便于结果展示。最后总结指出,理解原理是进一步优化和封装的基础。
205 0
|
9月前
|
存储 分布式计算 Hadoop
基于Java的Hadoop文件处理系统:高效分布式数据解析与存储
本文介绍了如何借鉴Hadoop的设计思想,使用Java实现其核心功能MapReduce,解决海量数据处理问题。通过类比图书馆管理系统,详细解释了Hadoop的两大组件:HDFS(分布式文件系统)和MapReduce(分布式计算模型)。具体实现了单词统计任务,并扩展支持CSV和JSON格式的数据解析。为了提升性能,引入了Combiner减少中间数据传输,以及自定义Partitioner解决数据倾斜问题。最后总结了Hadoop在大数据处理中的重要性,鼓励Java开发者学习Hadoop以拓展技术边界。
281 7
|
12月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
682 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
12月前
|
Java
Java 些许公共工具类
Java 些许公共工具类
66 1
|
缓存 前端开发 Java
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
【8月更文挑战第10天】java基础巩固,工具类的封装
86 1
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
170 8
|
Java API
Java文件处理完全指南:创建、读取、写入和删除文件详细解析
Java的文件处理非常灵活和强大。通过上述代码示例,我们可以清楚地理解在Java中如何高效地进行文件的创建、读取、写入和删除操作。值得注意的是,文件操作时我们常常会用到一些流(Stream)和读写字符的类,在操作完成之后,应当及时关闭这些资源,这可以通过使用try-with-resources语句来自动完成。这种方法不仅代码简洁,还能有效防止资源泄漏。总体而言,熟练掌握Java文件处理对于开发实用、健壮的应用程序至关重要。
714 1
|
设计模式 存储 安全
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
164 1
|
安全 Java 开发者
Java中的并发工具类与线程安全实现
Java中的并发工具类与线程安全实现
|
设计模式 缓存 算法
编写高效的Java工具类:实用技巧与设计模式
编写高效的Java工具类:实用技巧与设计模式