import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
* @author ycs
*/
public class YcsFileUtils {
/**
* 文件系统主要由inode和block组织。一个block一般4K大小,即使写入1字节到文件,文件所占大小也是4K
* <p>
* 详见:https://mp.weixin.qq.com/s?__biz=MjM5Njg5NDgwNA==&mid=2247487146&idx=1&sn=2786cd64da86d3d3c976ec8ddf0cbbf8&chksm=a6e30f91919486871b7e3e2530e8915a6d9034de905fcd81d9b673ac2d5b745f84dee936e9a8&cur_album_id=1371808335259090944&scene=189#wechat_redirect
*/
public static final int BLOCK = 4 * 1024;
/**
* 读取文件的byte数组到输出流
*
* @param filePath 文件路径 + 文件名
* @param os 输出流
* @return
*/
public static void readBytes(String filePath, OutputStream os) {
try (FileInputStream fileInputStream = new FileInputStream(filePath)) {
byte[] b = new byte[BLOCK];
int length;
while ((length = fileInputStream.read(b)) > 0) {
os.write(b, 0, length);
}
} catch (IOException e) {
throw new RuntimeException("读取文件的byte数组到输出流失败!filePath = " + filePath + "\n" + e);
}
}
/**
* 写入byte数组数据到文件中
*
* @param data 数据
* @param filePath 文件路径 + 文件名
* @return 目标文件
*/
public static void writeBytes(byte[] data, String filePath) {
try (FileOutputStream outputStream = new FileOutputStream(filePath)) {
outputStream.write(data);
} catch (IOException e) {
throw new RuntimeException("写入byte数组数据到文件中!filePath = " + filePath + "\n" + e);
}
}
/**
* 删除文件
*
* @param filePath 文件路径 + 文件名
* @return
*/
public static boolean deleteFile(String filePath) {
boolean flag = false;
File file = new File(filePath);
// 路径为文件且不为空则进行删除
if (file.isFile() && file.exists()) {
file.delete();
flag = true;
}
return flag;
}
/**
* 获取文件名后缀
* <p>
* 例如: xxx.txt, 返回: txt
*
* @param fileName 文件名
* @return (不含".")
*/
public static String getFileType(String fileName) {
int separatorIndex = fileName.lastIndexOf(File.separator);
if (separatorIndex < 0) {
return "";
}
return fileName.substring(separatorIndex + 1).toLowerCase();
}
/**
* 获取文件真实类型
*
* @param photoByte 文件字节码
* @return 后缀(不含".")
*/
public static String getFileExtendName(byte[] photoByte) {
if ((photoByte[0] == 71) && (photoByte[1] == 73) && (photoByte[2] == 70) && (photoByte[3] == 56)
&& ((photoByte[4] == 55) || (photoByte[4] == 57)) && (photoByte[5] == 97)) {
return "gif";
}
if ((photoByte[6] == 74) && (photoByte[7] == 70) && (photoByte[8] == 73) && (photoByte[9] == 70)) {
return "jpg";
}
if ((photoByte[0] == 66) && (photoByte[1] == 77)) {
return "bmp";
}
if ((photoByte[1] == 80) && (photoByte[2] == 78) && (photoByte[3] == 71)) {
return "png";
}
throw new RuntimeException("获取文件真实类型失败!");
}
}
01-14