精华内容
下载资源
问答
  • java 视频提取音频 | Java工具类

    万次阅读 多人点赞 2021-10-20 12:38:07
    将MP4视频内的音频提取出来,该工具类的解决思路如下: 1、提取视频音频pcm数据 2、将pcm数据封装音频头保存。 Maven依赖 <dependency> <groupId>cn.hutool</groupId> <artifactId...

    目录

    简述

    Maven依赖

    代码

    总结


    简述

    将MP4视频内的音频提取出来,该工具类的解决思路如下:

    1、提取视频音频pcm数据

    2、将pcm数据封装音频头保存。

    Maven依赖

            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>5.5.2</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.bytedeco</groupId>
                <artifactId>javacv-platform</artifactId>
                <version>1.5.5</version>
            </dependency>

    说明一下,这里用到了hutools工具包,因为可以大幅简化代码。如果有自己的读取文件流的工具类,可以不使用。

    代码

    上代码

    import cn.hutool.core.io.FileUtil;
    import cn.hutool.core.lang.UUID;
    import lombok.extern.slf4j.Slf4j;
    import org.bytedeco.javacpp.Loader;
    
    import java.io.BufferedOutputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.util.Optional;
    
    /** @Author huyi @Date 2021/10/20 12:11 @Description: mp4提取音频工具类 */
    @Slf4j
    public class Mp4ExtractAudioUtils {
    
      /**
       * 获取视频的文件pcm文件地址
       *
       * @param url MP4
       * @return
       * @throws Exception
       */
      public static String getMp4Pcm(String url, String tmpDir) throws Exception {
        Optional<String> pcmPath = Optional.empty();
        try {
          pcmPath = convertMP4toPCM(Paths.get(url), Paths.get(tmpDir));
        } catch (Exception exception) {
          exception.printStackTrace();
          throw new Exception("转换pcm异常:" + exception.getMessage());
        }
        if (pcmPath.isPresent()) {
          return pcmPath.get();
        } else {
          throw new Exception("视频转换音频失败");
        }
      }
      /**
       * 将单个PM4文件进行片头和片尾歌曲删除后,转换为PCM文件
       *
       * @param mp4Path
       * @param pcmDir
       * @return 转换完成后的pcm文件路径
       */
      public static Optional<String> convertMP4toPCM(Path mp4Path, Path pcmDir) {
        String ffmpeg = Loader.load(org.bytedeco.ffmpeg.ffmpeg.class);
        // 基于ffmpeg进行pcm转换
        // 基于输入路径的md5值来命名,也可以基于系统时间戳来命名
        String pcmFile = pcmDir.resolve(UUID.randomUUID() + ".pcm").toString();
        ProcessBuilder pcmBuilder =
            new ProcessBuilder(
                ffmpeg,
                "-y",
                "-i",
                mp4Path.toAbsolutePath().toString(),
                "-vn",
                "-acodec",
                "pcm_s16le",
                "-f",
                "s16le",
                "-ac",
                "1",
                "-ar",
                "16000",
                pcmFile);
        try {
          // inheritIO是指将 子流程的IO与当前java流程的IO设置为相同
          pcmBuilder.inheritIO().start().waitFor();
        } catch (InterruptedException | IOException e) {
          log.error("ffmpeg将mp4转换为pcm时出错", e);
          return Optional.empty();
        }
        // 返回pcm文件路径
        return Optional.of(pcmFile);
      }
    
      /**
       * 根据PCM文件构建wav的header字段
       *
       * @param srate Sample rate - 8000, 16000, etc.
       * @param channel Number of channels - Mono = 1, Stereo = 2, etc..
       * @param format Number of bits per sample (16 here)
       * @throws IOException
       */
      public static byte[] buildWavHeader(int dataLength, int srate, int channel, int format)
          throws IOException {
        byte[] header = new byte[44];
    
        long totalDataLen = dataLength + 36;
        long bitrate = srate * channel * format;
    
        header[0] = 'R';
        header[1] = 'I';
        header[2] = 'F';
        header[3] = 'F';
        header[4] = (byte) (totalDataLen & 0xff);
        header[5] = (byte) ((totalDataLen >> 8) & 0xff);
        header[6] = (byte) ((totalDataLen >> 16) & 0xff);
        header[7] = (byte) ((totalDataLen >> 24) & 0xff);
        header[8] = 'W';
        header[9] = 'A';
        header[10] = 'V';
        header[11] = 'E';
        header[12] = 'f';
        header[13] = 'm';
        header[14] = 't';
        header[15] = ' ';
        header[16] = (byte) format;
        header[17] = 0;
        header[18] = 0;
        header[19] = 0;
        header[20] = 1;
        header[21] = 0;
        header[22] = (byte) channel;
        header[23] = 0;
        header[24] = (byte) (srate & 0xff);
        header[25] = (byte) ((srate >> 8) & 0xff);
        header[26] = (byte) ((srate >> 16) & 0xff);
        header[27] = (byte) ((srate >> 24) & 0xff);
        header[28] = (byte) ((bitrate / 8) & 0xff);
        header[29] = (byte) (((bitrate / 8) >> 8) & 0xff);
        header[30] = (byte) (((bitrate / 8) >> 16) & 0xff);
        header[31] = (byte) (((bitrate / 8) >> 24) & 0xff);
        header[32] = (byte) ((channel * format) / 8);
        header[33] = 0;
        header[34] = 16;
        header[35] = 0;
        header[36] = 'd';
        header[37] = 'a';
        header[38] = 't';
        header[39] = 'a';
        header[40] = (byte) (dataLength & 0xff);
        header[41] = (byte) ((dataLength >> 8) & 0xff);
        header[42] = (byte) ((dataLength >> 16) & 0xff);
        header[43] = (byte) ((dataLength >> 24) & 0xff);
    
        return header;
      }
    
      /**
       * 默认写入的pcm数据是16000采样率,16bit,可以按照需要修改
       *
       * @param filePath
       * @param pcmData
       */
      public static String writeToFile(String filePath, byte[] pcmData) {
        BufferedOutputStream bos = null;
        try {
          bos = new BufferedOutputStream(new FileOutputStream(filePath));
          byte[] header = buildWavHeader(pcmData.length, 16000, 1, 16);
          bos.write(header, 0, 44);
          bos.write(pcmData);
          bos.close();
          return filePath;
        } catch (Exception e) {
          e.printStackTrace();
          return filePath;
        } finally {
          if (bos != null) {
            try {
              bos.close();
            } catch (IOException e) {
              e.printStackTrace();
            }
          }
        }
      }
    
      /**
       * 提取音频
       * @param mp4Path MP4地址
       * @param tmpDir 临时文件夹
       * @param resultPath 最终结果音频地址
       * @return 音频地址
       * @throws Exception 异常
       */
      public static String extractAudio(String mp4Path, String tmpDir, String resultPath)
          throws Exception {
        String pcmPath = getMp4Pcm(mp4Path, tmpDir);
        return writeToFile(resultPath, FileUtil.readBytes(pcmPath));
      }
    
      public static void main(String[] args) throws Exception {
        System.out.println(
            extractAudio(
                "C:\\Users\\huyi\\Desktop\\测试.mp4",
                "C:\\Users\\huyi\\Desktop",
                "C:\\Users\\huyi\\Desktop\\测试.wav"));
      }
    }

    执行结果:

    可以看到生成一个临时的pcm文件,可以自己调整工具类将临时文件删除。

    生成音频成功。

    总结

    这里有几点需要说明。

    1、hutools工具主要是为了使用一些方便的组件,可以用自定义的,不一定要引入。

    2、关于音频头文件的参数,在另一篇文章我有详细描述,可以参考:生成自定义时长的静音音频 | Java工具类_阿良的博客-CSDN博客

    3、里面用到了ffmpeg进行pcm转换,需要本地环境有ffmpeg环境,具体说明在我另一篇有描述,可以参考:java 音频转为wav格式标准音频 | Java工具类_阿良的博客-CSDN博客

    4、该工具类部分参数可以调整为入参模式,如果有疑问的话,可以私信我。

    如果本文对你有帮助,请点个赞支持一下吧。

     

     

     

     

    展开全文
  • 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类。 以下工具类、方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码。 一. org.apache.commons.io...

    在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类。

    以下工具类、方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码。

    一. org.apache.commons.io.IOUtils
    closeQuietly:关闭一个IO流、socket、或者selector且不抛出异常,通常放在finally块

    toString:转换IO流、 Uri、 byte[]为String

    copy:IO流数据复制,从输入流写到输出流中,最大支持2GB

    toByteArray:从输入流、URI获取byte[]

    write:把字节. 字符等写入输出流

    toInputStream:把字符转换为输入流

    readLines:从输入流中读取多行数据,返回List<String>

    copyLarge:同copy,支持2GB以上数据的复制

    lineIterator:从输入流返回一个迭代器,根据参数要求读取的数据量,全部读取,如果数据不够,则失败

    二. org.apache.commons.io.FileUtils
    deleteDirectory:删除文件夹

    readFileToString:以字符形式读取文件内容

    deleteQueitly:删除文件或文件夹且不会抛出异常

    copyFile:复制文件

    writeStringToFile:把字符写到目标文件,如果文件不存在,则创建

    forceMkdir:强制创建文件夹,如果该文件夹父级目录不存在,则创建父级

    write:把字符写到指定文件中

    listFiles:列举某个目录下的文件(根据过滤器)

    copyDirectory:复制文件夹

    forceDelete:强制删除文件

    三. org.apache.commons.lang.StringUtils
    isBlank:字符串是否为空 (trim后判断)

    isEmpty:字符串是否为空 (不trim并判断)

    equals:字符串是否相等

    join:合并数组为单一字符串,可传分隔符

    split:分割字符串

    EMPTY:返回空字符串

    trimToNull:trim后为空字符串则转换为null

    replace:替换字符串

    四. org.apache.http.util.EntityUtils
    toString:把Entity转换为字符串

    consume:确保Entity中的内容全部被消费。可以看到源码里又一次消费了Entity的内容,假如用户没有消费,那调用Entity时候将会把它消费掉

    toByteArray:把Entity转换为字节流

    consumeQuietly:和consume一样,但不抛异常

    getContentCharset:获取内容的编码
    http://www.wlkankan.cn/

    五. org.apache.commons.lang3.StringUtils
    isBlank:字符串是否为空 (trim后判断)

    isEmpty:字符串是否为空 (不trim并判断)

    equals:字符串是否相等

    join:合并数组为单一字符串,可传分隔符

    split:分割字符串

    EMPTY:返回空字符串

    replace:替换字符串

    capitalize:首字符大写

    六. org.apache.commons.io.FilenameUtils
    getExtension:返回文件后缀名

    getBaseName:返回文件名,不包含后缀名

    getName:返回文件全名

    concat:按命令行风格组合文件路径(详见方法注释)

    removeExtension:删除后缀名

    normalize:使路径正常化

    wildcardMatch:匹配通配符

    seperatorToUnix:路径分隔符改成unix系统格式的,即/

    getFullPath:获取文件路径,不包括文件名

    isExtension:检查文件后缀名是不是传入参数(List<String>)中的一个

    七. org.springframework.util.StringUtils
    hasText:检查字符串中是否包含文本

    hasLength:检测字符串是否长度大于0

    isEmpty:检测字符串是否为空(若传入为对象,则判断对象是否为null)

    commaDelimitedStringToArray:逗号分隔的String转换为数组

    collectionToDelimitedString:把集合转为CSV格式字符串

    replace 替换字符串

    delimitedListToStringArray:相当于split

    uncapitalize:首字母小写

    collectionToDelimitedCommaString:把集合转为CSV格式字符串

    tokenizeToStringArray:和split基本一样,但能自动去掉空白的单词

    八. org.apache.commons.lang.ArrayUtils
    contains:是否包含某字符串

    addAll:添加整个数组

    clone:克隆一个数组

    isEmpty:是否空数组

    add:向数组添加元素

    subarray:截取数组

    indexOf:查找某个元素的下标

    isEquals:比较数组是否相等

    toObject:基础类型数据数组转换为对应的Object数组

    九. org.apache.commons.lang.StringEscapeUtils
    参考十五:

    org.apache.commons.lang3.StringEscapeUtils

    十. org.apache.http.client.utils.URLEncodedUtils
    format:格式化参数,返回一个HTTP POST或者HTTP PUT可用application/x-www-form-urlencoded字符串

    parse:把String或者URI等转换为List<NameValuePair>
    http://www.wlkankan.cn/

    十一. org.apache.commons.codec.digest.DigestUtils
    md5Hex:MD5加密,返回32位字符串

    sha1Hex:SHA-1加密

    sha256Hex:SHA-256加密

    sha512Hex:SHA-512加密

    md5:MD5加密,返回16位字符串

    十二. org.apache.commons.collections.CollectionUtils
    isEmpty:是否为空

    select:根据条件筛选集合元素

    transform:根据指定方法处理集合元素,类似List的map()

    filter:过滤元素,类似List的filter()

    find:基本和select一样

    collect:和transform 差不多一样,但是返回新数组

    forAllDo:调用每个元素的指定方法

    isEqualCollection:判断两个集合是否一致
    http://www.wlkankan.cn/

    十三. org.apache.commons.lang3.ArrayUtils
    contains:是否包含某个字符串

    addAll:添加整个数组

    clone:克隆一个数组

    isEmpty:是否空数组

    add:向数组添加元素

    subarray:截取数组

    indexOf:查找某个元素的下标

    isEquals:比较数组是否相等

    toObject:基础类型数据数组转换为对应的Object数组

    十四. org.apache.commons.beanutils.PropertyUtils
    getProperty:获取对象属性值

    setProperty:设置对象属性值

    getPropertyDiscriptor:获取属性描述器

    isReadable:检查属性是否可访问

    copyProperties:复制属性值,从一个对象到另一个对象

    getPropertyDiscriptors:获取所有属性描述器

    isWriteable:检查属性是否可写

    getPropertyType:获取对象属性类型

    十五. org.apache.commons.lang3.StringEscapeUtils
    unescapeHtml4:转义html

    escapeHtml4:反转义html

    escapeXml:转义xml

    unescapeXml:反转义xml

    escapeJava:转义unicode编码

    escapeEcmaScript:转义EcmaScript字符

    unescapeJava:反转义unicode编码

    escapeJson:转义json字符

    escapeXml10:转义Xml10

    这个现在已经废弃了,建议使用commons-text包里面的方法。
    http://www.wlkankan.cn/

    十六. org.apache.commons.beanutils.BeanUtils
    copyPeoperties:复制属性值,从一个对象到另一个对象

    getProperty:获取对象属性值

    setProperty:设置对象属性值

    populate:根据Map给属性复制

    copyPeoperty:复制单个值,从一个对象到另一个对象

    cloneBean:克隆bean实例

    现在你只要了解了以上16种最流行的工具类方法,你就不必要再自己写工具类了,不必重复造轮子。

    大部分工具类方法通过其名字就能明白其用途,如果不清楚的,可以看下别人是怎么用的,或者去网上查询其用法。

    另外,工具类,根据阿里开发手册,包名如果要使用util不能带s,工具类命名为 XxxUtils。

    展开全文
  • 【强2】30个java工具类

    热门讨论 2010-09-14 11:57:03
    使用java工具类可有效的提高开发效率! 没有CSDN积分的朋友到这里源头下载:http://www.javacs.cn/bbs/thread-382-1-1.html 感谢支持 [工具类] CookieCounter .java.txt [工具类] 验证码img .jsp.txt [工具类] Java中...
  • JAVA工具类ObjectUtils.Null

    万次阅读 2020-10-22 10:46:40
    一、ObjectUtils.Null作为一个空占位符,其中null具有另外一个含义。 例如在HashMap中的HashMap.get(java.lang.Object) 方法返回null如果这个Map包含null(也就是有一个key对应的值为null),或者这里就不存在对应...

    一、ObjectUtils.Null类作为一个空占位符,其中null具有另外一个含义。

    例如在HashMap中的HashMap.get(java.lang.Object) 方法返回null如果这个Map包含null(也就是有一个key对应的值为null),或者这里就不存在对应的key,这个空的占位符可以区分这两种情况。

    如下代码HashMap中存储有一个字段username值为null

            Map<String, Object> map = new HashMap<String, Object>();
            map.put("username", null);
            System.out.println(map.get("username"));
            System.out.println(map.get("password"));这里写代码片
    

    输出结果是:

    null
    null
    

    根据如上的结果我们是没有办法区分Map中是否存在字段username、password的,要想区分Map中存在的字段username值为null和不存在字段password的情况我们可以使用空占位符的方法:

            map.put("username", ObjectUtils.NULL);
    
            System.out.println(ObjectUtils.NULL == map.get("username"));
            System.out.println(ObjectUtils.NULL == map.get("username1"));
            System.out.println(null == map.get("username1"));
    

    输出的结果是:

    true
    false
    true
    
    
    展开全文
  • elasticsearch搜索引擎查询java工具类

    千次阅读 2018-05-17 18:04:58
    Elasticsearch查询java工具类 项目组使用Elasticsearch搜索引擎也有一段时间了,刚开始是2.4版本,现在又要在新的工程中使用,准备升级为5.4版本,以前的工具类也不好用了,没办法,只能简单的写一个构建查询语句的...

    Elasticsearch查询java工具类

    项目组使用Elasticsearch搜索引擎也有一段时间了,刚开始是2.4版本,现在又要在新的工程中使用,准备升级为5.4版本,以前的工具类也不好用了,没办法,只能简单的写一个构建查询语句的工具类。小弟自知功底不够,有问题的地方还请大佬多多批评指正。

    注:由于所在公司特殊性,所以贴出的不是正在使用工程中的源码,而是我新建了一个工程去存放这些源码。

    接下来贴上代码结构:

    最重要的是esbuilder中的文件,其中包括es四大查询模式构建工具类,一个查询模式定义文件,一个构建工厂类,一个最终拼装类。使用了简单工厂设计模式加反射。

    下面是各个文件的具体代码:

    IESQueryBuilders:

     

    public interface IESQueryBuilders {
        IESQueryBuilders termQuery(String name, String... valve) throws  Exception;
        IESQueryBuilders wildcardQuery(String name, String... values) throws Exception;
        IESQueryBuilders rangeQuery(String name, String from, String to) throws Exception;
        BoolQueryBuilder getBoolQueryBuilder();
    }
    

     

    ESMust:

     

     

    public class ESMust implements IESQueryBuilders {
    
        private BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
    
        @Override
        public BoolQueryBuilder getBoolQueryBuilder() {
            return boolQueryBuilder;
        }
        @Override
        public ESMust termQuery(String name, String... values)  throws Exception {
            boolQueryBuilder.must(QueryBuilders.termsQuery(name, values));
            return this;
        }
    
        @Override
        public ESMust wildcardQuery(String name, String... values)  throws Exception{
            for (String value : values){
                boolQueryBuilder.must(QueryBuilders.wildcardQuery(name, "*" + value + "*"));
            }
            return this;
        }
    
        @Override
        public ESMust rangeQuery(String name, String from, String to) throws Exception {
            boolQueryBuilder.must(QueryBuilders.rangeQuery(name).from(from, true).to(to, true));
            return this;
        }
    }

    ESMustNot:

     

    public class ESMustNot implements IESQueryBuilders {
    
        private BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
        @Override
        public BoolQueryBuilder getBoolQueryBuilder() {
            return boolQueryBuilder;
        }
    
        @Override
        public ESMustNot termQuery(String name, String... values)  throws Exception {
            boolQueryBuilder.mustNot(QueryBuilders.termQuery(name, values));
            return this;
        }
    
        @Override
        public ESMustNot wildcardQuery(String name, String... values) throws Exception {
            for (String value : values){
                boolQueryBuilder.mustNot(QueryBuilders.wildcardQuery(name, "*" + value + "*"));
            }
            return this;
        }
    
        @Deprecated
        public ESMustNot rangeQuery(String name, String from, String to) throws Exception {
            return null;
        }
    }

    ESShould:

     

    public class ESShould implements IESQueryBuilders {
        private BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
        @Override
        public BoolQueryBuilder getBoolQueryBuilder() {
            return boolQueryBuilder;
        }
    
        @Override
        public ESShould termQuery(String name, String... values) throws Exception {
            boolQueryBuilder.should(QueryBuilders.termsQuery(name, values));
            return this;
        }
    
        @Override
        public ESShould wildcardQuery(String name, String... values) throws Exception {
            for (String value : values){
                boolQueryBuilder.should(QueryBuilders.wildcardQuery(name, "*" + value + "*"));
            }
            return this;
        }
    
        @Deprecated
        public ESShould rangeQuery(String name, String from, String to) throws Exception {
            return null;
        }
    }

    ESFilter:

     

    public class ESFilter implements IESQueryBuilders {
        private BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
        @Override
        public BoolQueryBuilder getBoolQueryBuilder() {
            return boolQueryBuilder;
        }
    
        @Override
        public ESFilter termQuery(String name, String... values) throws Exception {
            boolQueryBuilder.filter(QueryBuilders.termsQuery(name, values));
            return this;
        }
    
        @Override
        public ESFilter wildcardQuery(String name, String... values) throws Exception {
            for (String value : values){
                boolQueryBuilder.filter(QueryBuilders.wildcardQuery(name, "*" + value + "*"));
            }
            return this;
        }
    
        @Deprecated
        public ESFilter rangeQuery(String name, String from, String to) throws Exception {
    
            return null;
        }
    }
    

    ESQueryMode:

     

    public enum ESQueryMode implements Serializable{
          MUST("com.example.esbuilder.ESMust"),
            MUST_NOT("com.example.esbuilder.ESMustNot"),
            SHOULD("com.example.esbuilder.ESShould"),
            FILTER("com.example.esbuilder.ESFilter");
    
        private String mode;
    
        ESQueryMode(String mode) {
            this.mode = mode;
        }
    
        public String mode() {
            return mode;
        }
    }
    

    ESQueryBuilderFactory:

     

    public class ESQueryBuilderFactory {
    
        public static IESQueryBuilders creatESQueryBuilder(ESQueryMode mode) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
            Class<?> clazz = Class.forName(mode.mode());
            return (IESQueryBuilders) clazz.newInstance();
        }
    }
    

    ESQueryProduce:

     

    public class ESQueryProduce implements IESQueryProduce {
    
        private BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
    
        @Override
        public BoolQueryBuilder getBoolQueryBuilder() {
            return boolQueryBuilder;
        }
        @Override
        public IESQueryProduce getProduct(IESQueryBuilders esQueryBuilders) {
            boolQueryBuilder.must(esQueryBuilders.getBoolQueryBuilder());
            return this;
        }
    }

    然后就能自由的拼接复杂的es查询语句了。

    比如:

     

    IESQueryBuilders must = ESQueryBuilderFactory.creatESQueryBuilder(ESQuaryMode.MUST);
    must.termQuery("termName", "value1","value1");
    must.wildcardQuery("wildName","value1");
    
    IESQueryBuilders should = ESQueryBuilderFactory.creatESQueryBuilder(ESQuaryMode.SHOULD);
    should.wildcardQuery("wildName", "value1","value2");
    
    BoolQueryBuilder boolQueryBuilder = esQueryProduce.getProduct(must).getProduct(should).getBoolQueryBuilder();

    然后把最终生成的boolQueryBuilder放在SearchRequestBuilder中查询就可以了。

    代码地址:https://github.com/wanglclx/EsSearchDemo

    转载请注明出处:https://blog.csdn.net/wanglc7/article/details/80351551,谢谢。

     

    展开全文
  • 整理收集的一些常用java工具类

    万次阅读 多人点赞 2017-08-20 19:42:14
    整理收集的一些常用java工具类
  • java工具类书写规范

    千次阅读 2018-11-21 11:21:27
    写开发的工具类 需要灵活,适用性强 例如 写一个保存小数的方法,可以写一个保存两位的,可是这并不是最好的 ,最好的是在参数中添加一个(int length) 作为参数,如果参数没有,重写一个方法,在其中自定义默认 ...
  • java工具类调用Service层类的方法

    千次阅读 2019-09-26 21:57:31
    比如在工具类或者配置类中如果需要调用Service层的代码,则需要在该类上添加@Component 注解。然后使用以下写法: @Autowired private C_clienttype_Service TYpeservice; private static C_clienttype_Service...
  • 场景:有些工具类里面出现业务代码,导致工具类不好复用。只能在工具类新建一个类似方法勉强满足业务,但是这个工具类看起来就很low了。 解决:把工具类中的业务代码抽成一个方法,这个方法设置为抽象方法a...
  • MongoDB初探及JAVA工具类封装

    千次阅读 2018-05-05 00:12:43
    MongoDB 搭建及JAVA工具类封装 MongoDB 搭建及JAVA工具类封装 MongoDB 简介 基本语法 Mongo服务器搭建 安装包下载 环境变量配置 Mongo基本配置 Mongo起飞 JAVA工具类封装 MongoDB 简介 &nbsp;&...
  • java工具类@Autowired注入失败

    千次阅读 2019-06-11 11:28:05
    使用了@PostConstruct 注解 同时java类当中存在构造函数 @PostConstruct public void init() { autoSSPD = this; } public AutoSSPD(String[] ids,String tex){ this.ids = ids; this.te...
  • java工具类调用Service层类的方法。

    千次阅读 2019-02-28 15:23:41
    比如在工具类或者配置类中如果需要调用Service层的代码,则需要在该类上添加@Component注解。然后使用以下写法: @Autowired private XXService xxService; private staticxxService serv...
  • java工具类大全

    千次阅读 2019-06-21 13:28:53
    java工具类大全 这里我发现了一个非常好用的java工具类大全,开箱即用,而且还有源码在git上面,需要研究的可以下载源码查看。 这里奉上作品地址: https://www.hutool.club/docs/#/ ...
  • 好用的java 工具类推荐

    千次阅读 2019-01-17 14:54:42
    http://hutool.mydoc.io/undefined#text_319407
  • 我用的框架是springboot,我要实现的是在工具类中有static方法里用到注入的变量。但是普通的那种注入,是不起作用的。 解决办法:先定义要注入的变量,并且用static修饰;然后注入一个非static修饰的同类变量;然后...
  • 30个java工具类

    热门讨论 2010-09-14 08:45:37
    [工具类] 获得汉字拼音首字母的java工具类.java.txt [工具类] 获取绝对路径 .java.txt [工具类] 记录log日志文件的工具类 .java.txt [工具类] 连接数据库的工具类 .java.txt [工具类] 使用Java程序来实现HTTP文件的...
  • java工具类中注入service,dao类

    千次阅读 2017-10-31 10:39:13
    @Component public class ExcelUtils { @Resource private SysUserMapper sysUserMapper; private static ExcelUtils exceltUtils; @PostConstruct public void init() { excelUtils = th
  • java工具类-排序介绍

    千次阅读 2016-05-18 21:18:21
    java中的内部工具类的排序算法
  • java 工具类】集合判断是否为空

    万次阅读 2020-09-14 13:46:03
    前言 比如:判断list是否为空,通过我们是这样判断的...但是如果list 是一个null,那么这个方法就会报java.lang.NullPointerException异常。 记得之前在某篇文章看到的,推荐使用这个方法来判断: CollectionUtils.i.
  • 直接干货的官网:https://hutool.cn/docs/#/CHANGELOG
  • Java工具类——UUIDUtils

    万次阅读 2017-06-18 19:17:02
    : 生成随机字符串的工具类 uuid */ public class UUIDUtils { public static String getUUID (){ return UUID.randomUUID().toString().replace( "-" , "" ); } public static void ...
  • java后台微信支付工具类

    热门讨论 2016-05-11 14:53:16
    该资源为微信app支付java服务器代码所依赖的工具包,微信appV3代码请查看博客: http://blog.csdn.net/xu_xiao_ji/article/details/51374174
  • 为什么Java工具类方法为静态类

    千次阅读 2017-10-16 21:11:09
    转自:Java静态工具类线程安全的一些建议基础:每个线程都有自己的线程栈,栈与线程同时创建,每一个虚拟机线程都有自己的程序计数器PC,在任何时刻,一个虚拟机线程只会执行一个方法的代码,这个方法称为该线程的当前...
  • UrlUtil.java package com.bigbigbu.util.http; import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.Map; import org.apache.commons.lang3.StringUtils; /** * @Tit
  • java 工具类使用

    万次阅读 2021-03-19 16:45:31
    一个Java基础工具类,对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类,同时提供以下组件: hutool-aop JDK动态代理封装,提供非IOC下的切面支持 hutool-bloomFilter 布隆过滤...
  • JAVA工具类(17)--Java导入导出Excel工具类ExcelUtil

    万次阅读 多人点赞 2016-07-25 12:11:57
    导入导出中会出现各种各样的问题,比如:数据源为空、有重复行等,我自定义了一个ExcelException异常,用来处理这些问题。 ExcelException package common.tool.excel; public class Excel
  • Spring 并没有提供相应的工具类,您可以通过 jakarta commons lang 通用类包中(spring/lib/jakarta-commons/commons-lang.jar)的 StringEscapeUtils 完成这一工作: 清单 4. SqlEscapeExample ...
  • 应公司需要,需要给每个客户生成个性的微信图片二维码,涉及到... 图片实现代码,需依赖JAVA图片处理工具类(放大、缩小) PictureMerge.java package com.bigbigbu.wx.utils; import java.awt.Color; import java
  • JAVA工具类---URLUtil

    千次阅读 2018-01-24 14:25:57
    package com.evay.utils; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ConnectException; import java.net.Http
  • import java.lang.reflect.Field; /** *判断该对象是否: 返回ture表示所有属性为null 返回false表示不是所有属性都是null */ public class ObjIsUtil { //判断该对象是否: 返回ture表示所有属性为null 返回...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,164,649
精华内容 465,859
关键字:

java工具类

java 订阅