当前位置: 首页 > 编程日记 > 正文

条形码?二维码?生成、解析都在这里!

二维码生成与解析

一、生成二维码
二、解析二维码
三、生成一维码
四、全部的代码
五、pom依赖

直接上代码:

一、生成二维码

public class demo {private static final String path1="D:\\code.jpg";private static void qr(String text,int width,int weight,String filepath) throws WriterException, IOException {//首先创建一个QRCodeWriter对象QRCodeWriter qrCodeWriter = new QRCodeWriter();//设置二维码信息:text{二维码信息},格式,宽度,高度BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE,width,weight);//设置生成的二维码要保存的地方Path path = FileSystems.getDefault().getPath(filepath);//设置转换后的格式和地址MatrixToImageWriter.writeToPath(bitMatrix,"JPG",path);}public static void main(String[] args) throws IOException, WriterException {//可以传网址、文本信息过去qr("www.baidu.com",350,350,path1);}
}

二、解析二维码

   /*** 从一个图片文件中解码出二维码中的内容。* * @param file* @return 解析后的内容。* @throws IOException* @throws ReaderException*/public static final String parseImage(File file) throws IOException, ReaderException {BufferedImage image = ImageIO.read(file);return parseImage(image);}/*** 从图片中解析出一维码或者二维码的内容。如果解析失败,则抛出NotFoundException。* @param image* @return* @throws NotFoundException*/public static final String parseImage(BufferedImage image) throws NotFoundException {LuminanceSource source = new BufferedImageLuminanceSource(image);Binarizer binarizer = new HybridBinarizer(source);BinaryBitmap bitmap = new BinaryBitmap(binarizer);Result result = READER.decode(bitmap);// 这里丢掉了Result中其他一些数据return result.getText();}

三、生成一维码

    /*** 将字符串编码成一维码(条形码)。* @param content* @return* @throws WriterException* @throws IOException*/public static BufferedImage createBarCode(String content) throws WriterException, IOException {MultiFormatWriter writer = new MultiFormatWriter();// 一维码的宽>高。这里我设置为 宽:高=2:1BitMatrix matrix = writer.encode(content, BarcodeFormat.EAN_13, BARCODE_WIDTH * 3, BARCODE_WIDTH);return toBufferedImage(matrix);}/*** 将一个BitMatrix对象转换成BufferedImage对象* * @param matrix* @return*/private static BufferedImage toBufferedImage(BitMatrix matrix) {int width = matrix.getWidth();int height = matrix.getHeight();BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);for (int x = 0; x < width; x++) {for (int y = 0; y < height; y++) {image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);}}return image;}

四、接着出一下全部的

package com.demo.ajax.demo;
/*** 二维码生成类(可生成二维码和条形码)*/
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.Binarizer;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.NotFoundException;
import com.google.zxing.ReaderException;
import com.google.zxing.Result;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import javax.servlet.http.HttpServletResponse;public class QRCodeUtil {// 这几项可以由其他调用的类设置,因此是public static的public static int BARCODE_WIDTH = 80;public static int QRCODE_WIDTH = 200;public static String FORMAT = "jpg";// 生成的图片格式public static int BLACK = 0x000000;// 编码的颜色public static int WHITE = 0xFFFFFF;// 空白的颜色// 二维码中间的图像配置。注意,由于二维码的容错率有限,因此中间遮挡的面积不要太大,否则可能解析不出来。private static int ICON_WIDTH = (int)(QRCODE_WIDTH / 6);private static int HALF_ICON_WIDTH = ICON_WIDTH / 2;private static int FRAME_WIDTH = 2;// Icon四周的边框宽度// 二维码读码器和写码器private static final MultiFormatWriter WRITER = new MultiFormatWriter();private static final MultiFormatReader READER = new MultiFormatReader();// 测试public static void main(String[] args) throws Exception {/*** 二维码测试。*/String iconPath = "D:\\code.jpg";String content = "http://www.baidu.com";File qrCode = new File("/home/lxf/qrcode/qrcode." + FORMAT);File qrCodeWithIcon = new File("/home/lxf/qrcode/qrcode_img." + FORMAT);// 生成二维码writeToFile(createQRCode(content), qrCode);// 生成带图标的二维码writeToFile(createQRCodeWithIcon(content, iconPath), qrCodeWithIcon);// 解析二维码System.out.println(parseImage(qrCode));// 解析带图标的二维码System.out.println(parseImage(qrCodeWithIcon));// 编码成字节数组byte[] data = createQRCodeToBytes(content);String result = parseQRFromBytes(data);System.out.println(result);/*** 一维码测试。*/String barCodeContent="6936983800013";File barCode = new File("C:\\BarCode." + FORMAT);// 生成一维码writeToFile(createBarCode(barCodeContent), barCode);// 解析一维码System.out.println(parseImage(barCode));}/*** 将String编码成二维码的图片后,使用字节数组表示,便于传输。* * @param content* @return* @throws WriterException* @throws IOException*/public static byte[] createQRCodeToBytes(String content) throws WriterException, IOException {BufferedImage image = createQRCode(content);ByteArrayOutputStream os = new ByteArrayOutputStream();ImageIO.write(image, FORMAT, os);return os.toByteArray();}/*** 把一个String编码成二维码的BufferedImage.* * @param content* @return* @throws WriterException*/public static final BufferedImage createQRCode(String content) throws WriterException {// 长和宽一样,所以只需要定义一个SIZE即可BitMatrix matrix = WRITER.encode(content, BarcodeFormat.QR_CODE, QRCODE_WIDTH, QRCODE_WIDTH);return toBufferedImage(matrix);}/*** 编码字符串为二维码,并在该二维码中央插入指定的图标。* @param content* @param iconPath* @return* @throws WriterException*/public static final BufferedImage createQRCodeWithIcon(String content, String iconPath) throws WriterException {BitMatrix matrix = WRITER.encode(content, BarcodeFormat.QR_CODE, QRCODE_WIDTH, QRCODE_WIDTH);// 读取Icon图像BufferedImage scaleImage = null;try {scaleImage = scaleImage(iconPath, ICON_WIDTH, ICON_WIDTH, true);} catch (IOException e) {e.printStackTrace();}int[][] iconPixels = new int[ICON_WIDTH][ICON_WIDTH];for (int i = 0; i < scaleImage.getWidth(); i++) {for (int j = 0; j < scaleImage.getHeight(); j++) {iconPixels[i][j] = scaleImage.getRGB(i, j);}}// 二维码的宽和高int halfW = matrix.getWidth() / 2;int halfH = matrix.getHeight() / 2;// 计算图标的边界:int minX = halfW - HALF_ICON_WIDTH;//左int maxX = halfW + HALF_ICON_WIDTH;//右int minY = halfH - HALF_ICON_WIDTH;//上int maxY = halfH + HALF_ICON_WIDTH;//下int[] pixels = new int[QRCODE_WIDTH * QRCODE_WIDTH];// 修改二维码的字节信息,替换掉一部分为图标的内容。for (int y = 0; y < matrix.getHeight(); y++) {for (int x = 0; x < matrix.getWidth(); x++) {// 如果点在图标的位置,用图标的内容替换掉二维码的内容if (x > minX && x < maxX && y > minY && y < maxY) {int indexX = x - halfW + HALF_ICON_WIDTH;int indexY = y - halfH + HALF_ICON_WIDTH;pixels[y * QRCODE_WIDTH + x] = iconPixels[indexX][indexY];}// 在图片四周形成边框else if ((x > minX - FRAME_WIDTH && x < minX + FRAME_WIDTH && y > minY - FRAME_WIDTH && y < maxY + FRAME_WIDTH)|| (x > maxX - FRAME_WIDTH && x < maxX + FRAME_WIDTH && y > minY - FRAME_WIDTH && y < maxY + FRAME_WIDTH)|| (x > minX - FRAME_WIDTH && x < maxX + FRAME_WIDTH && y > minY - FRAME_WIDTH && y < minY + FRAME_WIDTH)|| (x > minX - FRAME_WIDTH && x < maxX + FRAME_WIDTH && y > maxY - FRAME_WIDTH && y < maxY + FRAME_WIDTH)) {pixels[y * QRCODE_WIDTH + x] = WHITE;}else {// 这里是其他不属于图标的内容。即为二维码没有被图标遮盖的内容,用矩阵的值来显示颜色。pixels[y * QRCODE_WIDTH + x] = matrix.get(x, y) ? BLACK : WHITE;}}}// 用修改后的字节数组创建新的BufferedImage.BufferedImage image = new BufferedImage(QRCODE_WIDTH, QRCODE_WIDTH, BufferedImage.TYPE_INT_RGB);image.getRaster().setDataElements(0, 0, QRCODE_WIDTH, QRCODE_WIDTH, pixels);return image;}/*** 从一个二维码图片的字节信息解码出二维码中的内容。* * @param data* @return* @throws ReaderException* @throws IOException*/public static String parseQRFromBytes(byte[] data) throws ReaderException, IOException {ByteArrayInputStream is = new ByteArrayInputStream(data);BufferedImage image = ImageIO.read(is);return parseImage(image);}/*** 从一个图片文件中解码出二维码中的内容。* * @param file* @return 解析后的内容。* @throws IOException* @throws ReaderException*/public static final String parseImage(File file) throws IOException, ReaderException {BufferedImage image = ImageIO.read(file);return parseImage(image);}/*** 将字符串编码成一维码(条形码)。* @param content* @return* @throws WriterException* @throws IOException*/public static BufferedImage createBarCode(String content) throws WriterException, IOException {MultiFormatWriter writer = new MultiFormatWriter();// 一维码的宽>高。这里我设置为 宽:高=2:1BitMatrix matrix = writer.encode(content, BarcodeFormat.EAN_13, BARCODE_WIDTH * 3, BARCODE_WIDTH);return toBufferedImage(matrix);}/*** 从图片中解析出一维码或者二维码的内容。如果解析失败,则抛出NotFoundException。* @param image* @return* @throws NotFoundException*/public static final String parseImage(BufferedImage image) throws NotFoundException {LuminanceSource source = new BufferedImageLuminanceSource(image);Binarizer binarizer = new HybridBinarizer(source);BinaryBitmap bitmap = new BinaryBitmap(binarizer);Result result = READER.decode(bitmap);// 这里丢掉了Result中其他一些数据return result.getText();}/*** 将BufferedImage对象输出到指定的文件中。* * @param image* @param destFile* @throws IOException*/public static final void writeToFile(BufferedImage image, File destFile) throws IOException {ImageIO.write(image, FORMAT, destFile);}/*** 将BufferedImage对象直接response* @param image* @param response* @throws IOException*/public static final void showQrcode(BufferedImage image, HttpServletResponse response) throws IOException{ImageIO.write(image, FORMAT, response.getOutputStream());}/*** 将一个BitMatrix对象转换成BufferedImage对象* * @param matrix* @return*/private static BufferedImage toBufferedImage(BitMatrix matrix) {int width = matrix.getWidth();int height = matrix.getHeight();BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);for (int x = 0; x < width; x++) {for (int y = 0; y < height; y++) {image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);}}return image;}/*** 把传入的原始图像按高度和宽度进行缩放,生成符合要求的图标。* * @param srcImageFile 源文件地址* @param height 目标高度* @param width 目标宽度* @param hasFiller 比例不对时是否需要补白:true为补白; false为不补白;* @throws IOException*/private static BufferedImage scaleImage(String srcImageFile, int height, int width, boolean hasFiller) throws IOException {double ratio = 0.0; // 缩放比例File file = new File(srcImageFile);BufferedImage srcImage = ImageIO.read(file);Image destImage = srcImage.getScaledInstance(width, height, BufferedImage.SCALE_SMOOTH);// 计算比例if ((srcImage.getHeight() > height) || (srcImage.getWidth() > width)) {if (srcImage.getHeight() > srcImage.getWidth()) {ratio = (new Integer(height)).doubleValue() / srcImage.getHeight();} else {ratio = (new Integer(width)).doubleValue() / srcImage.getWidth();}AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(ratio, ratio), null);destImage = op.filter(srcImage, null);}if (hasFiller) {// 补白BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics2D graphic = image.createGraphics();graphic.setColor(Color.white);graphic.fillRect(0, 0, width, height);if (width == destImage.getWidth(null)) {graphic.drawImage(destImage, 0, (height - destImage.getHeight(null)) / 2, destImage.getWidth(null), destImage.getHeight(null), Color.white, null);} else {graphic.drawImage(destImage, (width - destImage.getWidth(null)) / 2, 0, destImage.getWidth(null), destImage.getHeight(null), Color.white, null);}graphic.dispose();destImage = image;}return (BufferedImage) destImage;}
}

五、pom依赖

<!-- https://mvnrepository.com/artifact/com.google.zxing/core --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.4.0</version></dependency><!-- https://mvnrepository.com/artifact/com.google.zxing/javase --><!-- https://mvnrepository.com/artifact/com.google.zxing/javase --><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.4.0</version></dependency>

相关文章:

异步预热在线视频实现

转载自https://blog.zymlinux.net/index.php/archives/100 毕业之际给学校搭建了基于ATS的正向代理缓存服务器&#xff0c;专门用来处理优酷土豆等在线视频流量。通过改写一个浏览器做成在线视频专用浏览器&#xff0c;内置了ATS的代理设置。 用php配合memcacheq和小脚本实现了…

文本输入框、密码输入框

当用户要在表单中键入字母、数字等内容时&#xff0c;就会用到文本输入框。文本框也可以转化为密码输入框。 语法&#xff1a; <form><input type"text/password" name"名称" value"文本" /> </form> 1、type&#xff1a; 当t…

Linux安装mysql,一步到位!

今天在腾讯云上面买了一个服务器&#xff0c;想要把自己的项目部署一下&#xff0c;就要安装mysql&#xff0c;以下是我的安装步骤,在网上有很多人把install敲错了&#xff0c;还有的少-get&#xff0c;种种错误试完之后&#xff0c;我决定发一篇 sudo apt-get install mysql-…

Ubuntu 12.04安装firefox 26中的flash plugin方法

Ubuntu 12.04 64bit中安装firefox 26中的flash player插件的方法昨天, 有最新的firefox 26更新了,可是我在软件更新中无法下载到ubuntu官方源中的flash plugin,详细的情况可以参见如下网页,这个问题我一年前也遇到过,特记录下来,以备后来查阅.http://blog.sina.com.cn/s/blog_9…

内联式css样式,直接写在现有的HTML标签中

CSS样式可以写在哪些地方呢&#xff1f;从CSS 样式代码插入的形式来看基本可以分为以下3种&#xff1a;内联式、嵌入式和外部式三种。这一小节先来讲解内联式。 内联式css样式表就是把css代码直接写在现有的HTML标签中&#xff0c;如下面代码&#xff1a; <p style"col…

Linux下安装Java8

Linux(ubuntu)下Java8安装 1.下载jdk8 这个看大家了&#xff0c;linux版本的就可以 2.创建jvm文件夹 在根目录下创建名为jvm的文件夹&#xff08;在哪里创建看个人&#xff09; $ sudo mkdir jvm3.将下载的包解压到jvm文件夹下 $ sudo tar zxvf 压缩包路径/名字 -C /jvm…

RTMFP协议

RTMFP是Adobe公司开发的一套新的通信协议&#xff0c;该协议可以让使用Adobe Flash Player的终端用户之间进行直接通信。用Adobe AIR框架开发的程序也可以用此协议来发布直播、实时信息。  通过使用RTMFP, 那些原来直播、实时通信的应用&#xff0c;比如社区、音视频聊天和多人…

CodeForces 595A

题目链接&#xff1a; http://codeforces.com/problemset/problem/595/A 题意&#xff1a; 一栋楼&#xff0c;有n层&#xff0c;每层有m户&#xff0c;每户有&#xff12;个窗户&#xff0c;问这栋楼还有多少户没有睡觉&#xff08;只要一个窗户灯亮就代表这户没有睡觉&#x…

将Eclipse中Web项目打成war包

将Eclipse中Web项目打成war包 请按如下操作即可&#xff1a;

测试代码发布到博客效果(Windows Live Writer发布)

测试代码发布到博客效果(Windows Live Writer发布) public class SwitchCase {/*** 1、switch后面的表达式为常量表达式,类型只能是可以转化为int、enum(1.6)、String(1.7)的类型* 2、可以转化为int类型的数据类型有&#xff1a;byte、short、int、char* 3、boolean类型的数据类…

设置腾讯云linux服务器中 MySQL 允许远程访问

申请了一台linux腾讯云服务器&#xff0c;想要把数据库搭建在上面&#xff0c;本地的Windows直接可以访问 以下就是具体的操作流程&#xff0c;首先你需要安装好一个mysql&#xff0c;安装方法–>mysql安装(Linux) 接着就开始操作咯&#xff1a; 一、开启 MySQL 远程访问权…

js 判断js,css是否引入,确保不重复引入

js 判断js,css是否引入&#xff0c;确保不重复引入 (2009-10-31 21:33:44) 转载▼标签&#xff1a; 杂谈 分类&#xff1a; js基本原理&#xff1a;function loadjscssfile(filename, filetype){if (filetype"js"){ //if filename is a external JavaScript filev…

Ubuntu18彻底删除MySQL5.7数据库

首先在终端中查看MySQL的依赖项&#xff1a;dpkg --list|grep mysql (有或者没有都可以继续执行) 移除所有mysql公共依赖&#xff1a;sudo apt-get remove mysql-common 卸载&#xff1a;sudo apt-get autoremove --purge mysql-server-5.7 清除残留数据&#xff1a;dpkg -…

软件缺陷处理流程

今天&#xff0c;我们的主任研究了一下我出的软件缺陷处理流程&#xff0c;觉得不严谨&#xff0c;他重新梳理了一个&#xff0c;偶还是觉得自己梳理的比较直接&#xff0c;没有那么复杂。 这里博客记录&#xff0c;用于纪念我的心血&#xff0c;因为说不定哪天偶的这点心血会被…

Linux下tomcat的安装与卸载以及配置(超简单)

无敌简单的几步 1、安装 //首先你需要下载好tomcat包 sudo tar -xvzf apache-tomcat-7.0.85.tar.gz(这里是包名) -C 你要放的位置2、卸载 rm -rf 你的tomcat目录3配置&#xff1a; 进入目录/tomcat/apache-tomcat-8.5.51/bin&#xff0c;编辑文件startup.sh&#xff0c;在…

《创业维艰分享之五》所有得,有所乐,日事日清,循序渐进。

这两个月公司连续做了两个大客户紧接着发布新版本再然后又是连续五个小版本迭代计划。 每天16小时的超强度工作&#xff0c;我已经看到兄弟的脸上都写着一个字&#xff1a;累&#xff01; 我自己又何尝不是&#xff0c;既是客服&#xff0c;又是程序员&#xff0c;还必须是行政…

docker上你必须会的那些命令

一、基础类 查看docker信息 # 查看docker版本 docker version # 显示docker系统的信息 docker info # 日志信息 docker logs # 故障检查 service docker status # 启动关闭docker sudo service docker start|stop二、容器操作命令 1、创建删除容器 # 创建一个容器命名为 te…

iOS开发UI篇—transframe属性(形变)

iOS开发UI篇—transframe属性&#xff08;形变&#xff09; 1. transform属性 在OC中&#xff0c;通过transform属性可以修改对象的平移、缩放比例和旋转角度 常用的创建transform结构体方法分两大类 &#xff08;1&#xff09; 创建“基于控件初始位置”的形变 CGAffineTransf…

docker一步安装mysql,docker的魅力就在于此

正常来说&#xff0c;使用docker安装东西的步骤是serach它有没有&#xff0c;然后pull它 这里其实只要一步&#xff08;如果你没有安装过、没有端口占用等问题的话&#xff01;&#xff01;&#xff09; $ docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORDroo…

python-day05正则表达式

相关参考文档地址:http://bbs.fishc.com/thread-57073-1-1.html&#xff08;小甲鱼论坛&#xff09; 摘录老师之精华 re模块用于对python的正则表达式的操作。 字符&#xff1a; . 匹配除换行符以外的任意字符  \w 匹配字母或数字或下划线或汉字  \s 匹配任意的空白符  \…

Vim编辑器的常用快捷键.

Linux中的文本操作离不开Vim编辑器的使用. Vim编辑器的使用相对门槛较高.需要挺长一段时间的适应. 总结一些Vim使用过程中常用的命令(这些命令基本上都是在vim的命令模式下使用) 1.跳转到文本的开头gg 2.跳转到文本的末尾G (shiftg) 3.查看文本的总共有多少行(:set nu) 关于这个…

在docker上安装部署tomcat项目 超简单,拿来主义

在docker中部署tomcat&#xff0c;非常简单&#xff0c;而且省去了手动安装jdk等步骤&#xff0c;只需要将war包复制在容器tomcat实例中的webapps下面即可。以下将详细讲解流程&#xff1a; 在windows中打好包以后用winSPC拖放到linux系统中&#xff0c;我的直接放在了/home/ub…

docker停止、删除容器、删除镜像 一看就理解

当你的容器中出现问题&#xff08;比如我改坏了文件&#xff09;需要重新部署一台的时候&#xff0c;就需要将这个容器实例删除 接着&#xff1a; #查看当前的容器ID $ docker ps这里你会看到有两列id&#xff0c;一列是镜像id&#xff0c;一列是容器id&#xff0c;我们要分清…

JavaScript对象掺杂点原型

我读完权威指南一部分的理解&#xff0c;对象和原型的关系&#xff1a;任何对象都可以充当原型 转载于:https://www.cnblogs.com/gaizaotuling/p/5553130.html

docker镜像的备份和恢复

在使用docker的时候总会出现这种情况&#xff1a;下载东西很慢很慢&#xff0c;下载完配置完以后&#xff0c;突然&#xff0c;一个地方配置出现了问题&#xff0c;无法恢复&#xff0c;需要重新装载&#xff0c;那么&#xff0c;之前的所有配置、安装、下载都没了&#xff0c;…

黑盒测试方法案例

1.根据下面给出的规格说明&#xff0c;利用等价类进行测试用例的设计。 一个程序读入3个正整数&#xff0c;把这三个数值看作一个三角形的3条边的长度值。这个程序要打印出信息&#xff0c;说明这个三角形是普通的、是等腰的、还是等边的。 a.找出输入输出条件&#xff0c;列出…

Dockerfile 入门看这篇就够了

在使用docker时&#xff0c;有很多像往容器中复制war包、修改容器配置之类的操作&#xff0c;很繁琐&#xff0c;配置失败或异常时就又是一遍重复的操作&#xff0c;这时候&#xff0c;就要用到这个脚本文件–Dockerfile 以下是我对Dockerfile的理解&#xff1a; 1、首先 Docke…

【DSP开发】C6000非多核非KeyStone系列DSP中断系统

C6000系列DSP的中断系统 上一篇介绍了C6455的GPIO系统&#xff0c;最后把GPIO4配置成了中断/事件模式&#xff0c;本文将介绍C6455的中断系统&#xff0c;介绍完基本概念后&#xff0c;给出把GPIO4映射到INT4的代码。 完成了GPIO和中断的配置&#xff0c;我们就可以开始着手DSP…

SVN用法大全,SVN除了update、commit还有什么

svn除了大家都知道的update、commit以外还有什么常用功能呢&#xff1f; 点击TortoiseSVN后&#xff0c;出现了右图的列表&#xff0c;这其中有哪些是常用的功能呢&#xff1f;最近在家办公&#xff0c;有些东西要svn操作&#xff0c;就了解了下。 咱们从上面开始 1、Show log…

递归删除目录下的所有文件

import java.io.File; public class DeleteDirectory { /** * 删除空目录 * param dir 将要删除的目录路径 */ private static void doDeleteEmptyDir(String dir) { boolean success (new File(dir)).delete(); if (success) { System.out.println("Successfully delete…