java 怎么生成一个0-9,a-z的一个44位字符串作为上传文件的名字
PHP中文网
PHP中文网 2017-04-17 11:54:27
[Java讨论组]

找到一个时间MD5加密的

package org.blog.controller;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.io.FileUtils;
import org.blog.dao.PicDAO;
import org.blog.model.Pic;
import org.blog.util.md5;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
@Controller
@RequestMapping(value = "/save")
public class UploadController {
    @Autowired
    PicDAO picDAO;
         @RequestMapping(value = "/upload", method = RequestMethod.POST) 
         public String handleFormUpload(Pic pic,MultipartFile file,HttpServletRequest request) throws IOException{
             String pic_path =  request.getSession().getServletContext().getRealPath("/theme");   
             /* 从当时时间MD5强制重命名图片*/
             String pic_time = new  SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());   
             String pic_type = file.getContentType();
             String file_ture_name = md5.MD5(pic_time);
             if(pic_type.equals("image/jpeg")){
                 file_ture_name =   file_ture_name.concat(".jpg");
             } else if (pic_type.equals("image/png")){
                 file_ture_name = file_ture_name.concat(".png");
             } else if(pic_type.equals("image/bmp")){
                 file_ture_name =  file_ture_name.concat(".bmp");
             } else if(pic_type.equals("image/gif")){
                 file_ture_name = file_ture_name.concat(".gif");
             } else file_ture_name = file_ture_name.concat(".jpg");
             /*保存文件*/
             FileUtils.copyInputStreamToFile(file.getInputStream(), new File(pic_path, file_ture_name));  
             pic.setPicFile(file_ture_name);
             try {
                picDAO.add(pic);
                return "redirect:/admin/AllPic";
            } catch (Exception e) {
                e.printStackTrace();
                return "redirect:/admin/error";
            }
         }
}

0-9,a-z的一个44位字符串怎么搞

找到一个方法

/**
* JAVA获得0-9,a-z,A-Z范围的随机数
* @param length 随机数长度
* @return String
*/
public static String getRandomChar(int length) {
    char[] chr = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
    'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
    'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
    Random random = new Random();
    StringBuffer buffer = new StringBuffer();
    for (int i = 0; i < length; i++) {
        buffer.append(chr[random.nextInt(62)]);
    }
    return buffer.toString();
}

public static String getRandomChar() {
    return getRandomChar(10);
}

========================================================================

文件名要求是:

前面四十几位为0-9,a-z不要大写,
后面6位0-9,a-z,A-Z,需要大写,
中间用-连接,
格式:7b9194849dd989fa9e9df1332c8467111caf242c854f62-bJuK1X

下面这样是不是速度非常慢,还是这个本来就很快,不需要考虑速度

@Test
    public void testRandomChar() {
        for(int i=0;i<=100;i++){
            System.out.println(getRandomChar2(44)+"-"+getRandomChar(6));
        }
    }


    /**
    * JAVA获得0-9,a-z,A-Z范围的随机数
    * @param length 随机数长度
    * @return String
    */
    public static String getRandomChar(int length) {
        char[] chr = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
        'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
        Random random = new Random();
        StringBuffer buffer = new StringBuffer();
        for (int i = 0; i < length; i++) {
            buffer.append(chr[random.nextInt(62)]);
        }
        return buffer.toString();
    }
    public static String getRandomChar2(int length) {
        char[] chr = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
        'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
        Random random = new Random();
        StringBuffer buffer = new StringBuffer();
        for (int i = 0; i < length; i++) {
            buffer.append(chr[random.nextInt(36)]);
        }
        return buffer.toString();
    }

    public static String getRandomChar() {
        return getRandomChar(10);
    }
PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(5)
高洛峰

我又修改了一下,加了一个参数,现在生成的类似于“58k70zwju5vyy9cxyrq1o4f65lqslv4o2q94pckzqkpg-a4DdNW”这样的字符串。

/**
 * 生成指定长度的随机字符串
 * @param length 随机数长度
 * @param type 随机数的类型,0为不带大写字母,1为带大写字母
 * @return String
 */
public static String getRandomStr(int length,int type){
    String chars;
    chars=(type==0)?"0123456789abcdefghijklmnopqrstuvwxyz":"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    int len=chars.length();
    String ret="";
    for(int i=0;i<length;i++){
        Random rd=new Random();
        int rn=rd.nextInt(len);
        char chr=chars.charAt(rn);
        ret=ret+chr;
    }
    return ret;
}

调用方法:getRandomStr(44,0)+"-"+getRandomStr(6,1)就可以。

另外因为使用了随机函数,需要引用类库import java.util.Random;

大家讲道理

UUID可以吗,中间会多出来几个横线。

System.out.println(UUID.randomUUID().toString());
// => d21cc12f-2bbb-4e88-ab89-39ab703a487e

忘了看还有长度要求。求隐藏

天蓬老师

引入apache commons-lang包然后调用

import org.apache.commons.lang3.RandomStringUtils

System.out.println(String.format("%s-%s", RandomStringUtils.random(44, "0123456789abcdefghijklmnopqrstuvwxyz"), RandomStringUtils.randomAlphanumeric(6)));
巴扎黑

如果只是随机生成上传文件名,用

UUID.randomUUID().toString()

就够了,我的工程里都这样给上传文件起名的。望采纳

阿神

使用随机字符串还是有可能重复,再加上时间戳可以避免重复。
其实直接使用uuid最好了,把-替换掉,然后随便补几个字符串,达到题主要求的44个字符就ok了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号