java 读取png_Java文件操作之创建、读取、删除、复制,文字生成png图片,下载网络文件...

本文介绍了一个Java工具类FileUtils,用于处理文件的各种操作,如读取、复制、删除文件,以及根据文本和字体生成背景透明的PNG图片。此外,还提供了获取文件后缀名、判断是否为视频文件等方法。
摘要由CSDN通过智能技术生成

importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics2D;importjava.awt.Transparency;importjava.awt.font.FontRenderContext;importjava.awt.geom.AffineTransform;importjava.awt.geom.Rectangle2D;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.nio.channels.FileChannel;importjava.time.LocalDateTime;importjava.time.format.DateTimeFormatter;importjava.util.ArrayList;importjava.util.HashSet;importjava.util.List;importjava.util.Set;importjavax.imageio.ImageIO;/*** 工具类功能:

* 1.通过文件路径获取相关信息

* 2.生成新的文件地址

* 3.读取、复制、删除文件

* 4.根据文本字体大小生成背景透明的png图片

*@authormaxinhai

**/

public classFileUtils {/*** 程序可处理视频类型*/

private static Set fileTypeSet = new HashSet<>();static{

fileTypeSet.add("mp4");

fileTypeSet.add("flv");

fileTypeSet.add("avi");

fileTypeSet.add("rm");

fileTypeSet.add("rmvb");

fileTypeSet.add("wmv");

}/*** 获取指定文件的后缀名

*@paramfile

*@return

*/

public staticString getFormat(File file) {

String fileName=file.getName();

String format= fileName.substring(fileName.indexOf(".") + 1);returnformat;

}/*** 读取某个文件夹下的所有视频文件

*

*@paramfilePath 要读取的路径

*@return

*/

public static ListreadDic(String filePath) {

List fileList = new ArrayList<>();

File file= new File(filePath); //获取其file对象

readDic(file, fileList);returnfileList;

}/*** 读取目录

*

*@paramfile

*@paramfileList*/

private static void readDic(File file, ListfileList) {

File[] fs=file.listFiles();for(File f : fs) {//若是目录,则递归打印该目录下的文件

if(f.isDirectory()) {

readDic(f, fileList);

}//若是文件,直接打印

if (f.isFile() &&isVideo(f.getAbsolutePath().toString())) {

fileList.add(f.getAbsolutePath().toString());

}

}

}/*** 判断文件不否是视频

*

*@paramfileName

*@return

*/

public static booleanisVideo(String fileName) {if (fileName.indexOf(".") == -1) {return false;

}

String fileType= fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length());returnfileTypeSet.contains(fileType);

}/*** 获得视频文件格式

*

*@paramvideoPath

*@return

*/

public staticString getVideoSuffix(String videoPath) {return videoPath.substring(videoPath.lastIndexOf("."));

}/*** 根据文件路径获取文件名

*@paramfilePath

*@return不带文件格式的文件名*/

public staticString getFileName(String filePath) {int startIndex = filePath.lastIndexOf("\\");return filePath.substring(startIndex+1, filePath.length());

}/*** 根据文件路径获取文件名称带后缀

*@paramfilePath

*@return

*/

public staticString getFileNameAndSuffix(String filePath) {int startIndex = filePath.lastIndexOf("\\");int lastIndex = filePath.lastIndexOf(".");return filePath.substring(startIndex+1, lastIndex);

}/*** 功能描述 生成新的文件路径

*

*@paramcurrentVideo : 原来文件路径

*@returntargetPath : 新的文件路径

*@authorxinhai.ma

* @date 2020/5/9 14:33*/

public staticString getNewFilePath(String currentVideo, String folderPath) {

String targetPath= null;if (null ==currentVideo) {

targetPath= folderPath + File.separator + getTimeStr() + ".mp4";

}else{

targetPath= folderPath + "\\" + getTimeStr() +getVideoSuffix(currentVideo);

}returntargetPath;

}/*** 获得格式化后的当前时间

*

*@return

*/

public staticString getTimeStr() {

DateTimeFormatter formatter= DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");

LocalDateTime createTime=LocalDateTime.now();returncreateTime.format(formatter);

}/*** 获取简洁路径

*

*@parampath 文件路径

*@return简洁路径*/

public staticString getSimplePath(String path) {int firstIndex = path.indexOf("\\");int lastIndex = path.lastIndexOf("\\");

String begin= path.substring(0, firstIndex + 1);

String end=path.substring(lastIndex, path.length());return begin + "..." +end;

}/*** 获取简洁路径集合

*

*@parampathList 文件路径集合

*@return简洁路径集合*/

public static List getSimplePathList(ListpathList) {

List simplePathList = new ArrayList<>(pathList.size());

pathList.forEach(path->{if (!path.equals("暂无数据")) {

simplePathList.add(getSimplePath(path));

}

});returnsimplePathList;

}/*** 创建多重文件夹及文件

*

*@paramfolderPath 文件夹路径

*@paramfilePath 文件名称及后缀*/

public static voidcreateFile(String folderPath, String filePath) {

File folder= newFile(folderPath);

File file= new File(folderPath + File.separator +filePath);if (!folder.isFile() && !folder.exists()) {

folder.mkdirs();

}if (!file.exists()) {try{boolean result =file.createNewFile();if (!result) {

System.out.println("创建文件失败! {}" + folderPath + File.separator +filePath);

}else{

System.out.println("创建文件成功!" + folderPath + File.separator +filePath);

}

}catch(IOException e) {

e.printStackTrace();

}

}

}/*** 删除文件

*

*@paramfilePath 文件路径

*@return删除结果*/

public static booleandeleteFile(String filePath) {boolean result = false;

File file= newFile(filePath);if(file.exists()) {

file.delete();

result= true;

}returnresult;

}/*** 复制文件

*

*@paramsourcePath 要复制的文件路径

*@paramtargetPath 复制到的路径*/

public static voidcopyFile(String sourcePath, String targetPath) {

FileInputStream fi= null;

FileOutputStream fo= null;

FileChannel in= null;

FileChannel out= null;try{

fi= newFileInputStream(sourcePath);

fo= newFileOutputStream(targetPath);

in= fi.getChannel();//得到对应的文件通道

out = fo.getChannel();//得到对应的文件通道

in.transferTo(0, in.size(), out);//连接两个通道,并且从in通道读取,然后写入out通道

} catch(IOException e) {

e.printStackTrace();

}finally{try{

fi.close();

in.close();

fo.close();

out.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}/*** 同步复制文件

*@paramsourceFolderPath 要复制的文件夹

*@paramtargetFolderPath 目标文件夹*/

public static voidbatchCopyFile(String sourceFolderPath, String targetFolderPath) {

File sourceFolder= newFile(sourceFolderPath);

File targetFolder= newFile(targetFolderPath);if (!sourceFolder.exists()) {new RuntimeException(sourceFolderPath + "路径不存在!");

}if (!targetFolder.exists()) {new RuntimeException(targetFolderPath + "路径不存在!");

}if(sourceFolder.isFile()) {new RuntimeException(sourceFolderPath + "不是文件夹!");

}if(targetFolder.isFile()) {new RuntimeException(targetFolderPath + "不是文件夹!");

}

File[] files=sourceFolder.listFiles();for(int i=0; i

String source=files[i].getAbsolutePath();

String target= targetFolderPath + File.separator +files[i].getName();

copyFile(source, target);

}

}/*** 同步复制文件

*@paramfilePathList 文件地址集合

*@paramtargetFolderPath 目标文件夹*/

public static List batchCopyFile(ListfilePathList, String targetFolderPath) {

List targetPathList = new ArrayList<>(filePathList.size());

File targetFolder= newFile(targetFolderPath);if (!targetFolder.exists()) {new RuntimeException(targetFolderPath + "路径不存在!");

}if(targetFolder.isFile()) {new RuntimeException(targetFolderPath + "不是文件夹!");

}

filePathList.forEach(path->{

String target= targetFolderPath + File.separator +getFileName(path);

copyFile(path, target);

targetPathList.add(target);

});returntargetPathList;

}/*** 根据文字生成png图片,并返回图片路径

*@paramdrawStr

*@paramfont

*@paramtargetPath

*@return

*/

public static voidcreateImage(String drawStr, Font font, File targetPath) {//获取font的样式应用在str上的整个矩形

Rectangle2D r= font.getStringBounds(drawStr, new FontRenderContext(AffineTransform.getScaleInstance(1, 1),false,false));int unitHeight=(int)Math.floor(r.getHeight());//获取单个字符的高度//获取整个str用了font样式的宽度这里用四舍五入后+1保证宽度绝对能容纳这个字符串作为图片的宽度

int width=(int)Math.round(r.getWidth())+1;int height=unitHeight+3;//把单个字符的高度+3保证高度绝对能容纳字符串作为图片的高度//创建图片

BufferedImage image = newBufferedImage(width, height, BufferedImage.TYPE_INT_BGR);

Graphics2D g=image.createGraphics();//设置透明 start

image =g.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);

g=image.createGraphics();//设置透明 end

g.setFont(font); //设置字体

g.setColor(Color.ORANGE); //设置颜色//g.drawRect(0, 0, width - 1, height - 1);//画边框

g.drawString(drawStr, 0, font.getSize());

g.dispose();try{//输出png图片

ImageIO.write(image, "png", targetPath);

}catch(IOException e) {

e.printStackTrace();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值