Java后端常用工具类

2020.07.14 18:07:50
31
阅读约 3 分钟

本文用来记录后端开发过程中常用的方法,囊括各个开发过程,防止再次开发时出现找不到资料的情况
img

将字符串中的\n转换行符 #

 String str = str.replaceAll("\\\\n", "\n");

输出图片 #

 @PostMapping(value = "getFile")
    @ResponseBody
    public void getFile(@Validated TtemporaryFiles ttemporaryFiles, HttpServletResponse response) throws IOException {

        TtemporaryFiles files = ttemporaryFilesService.getAndValid(ttemporaryFiles);

        response.setHeader("Cache-Control","no-store, no-cache");
        response.setContentType("image/jpeg");
        ServletOutputStream outputStream = response.getOutputStream();
        byte[] fileBlob = files.getFileBlob();

        InputStream buffin = new ByteArrayInputStream(fileBlob);

        BufferedImage img = ImageIO.read(buffin);

        ImageIO.write(img,"jpg",outputStream);
        IOUtils.closeQuietly(outputStream);

    }

获取字节流 #

 private byte[] getByteFromInputStream(InputStream in) {
        byte[] be = null;
        try {
            ByteArrayOutputStream out = new ByteArrayOutputStream(4000);
            byte[] b = new byte[4000];
            int n;
            while ((n = in.read(b)) != -1) {
                out.write(b, 0, n);
            }
            in.close();
            out.close();
            be = out.toByteArray();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return be;
    }

byte转为bufferimage #

InputStream buffin = new ByteArrayInputStream(/*二进制串*/, 
                                              /*起始位置*/, 
                                              /*二进制串长度*/)); 

BufferedImage img = ImageIO.read(buffin); 

image转byte #

       ByteArrayOutputStream out = new ByteArrayOutputStream();

        RenderedImage renderedImage = IcePdf.pdf2Pic(file.getInputStream());


        ImageIO.write(renderedImage,"jpeg",out);

        return new String(Base64.encodeBase64(out.toByteArray()));

快速获取所有bean #

ApplicationContext ctx = SpringApplication.run(Application.class, args);

		System.out.println("Let's inspect the beans provided by Spring Boot:");

		String[] beanNames = ctx.getBeanDefinitionNames();
		Arrays.sort(beanNames);
		for (String beanName : beanNames) {
			System.out.println(beanName);
		}

文件写入 #

java处理文件的类里面,stream结尾都是采用字节流,reader和writer结尾都是采用字符流。两者的区别就是读写的时候一个是按字节读写,一个是按字符。

字符流的底层就是字节流。而字符流主要是读取文本文件内容的,可以一个字符一个字符的读取,也可以一行一行的读取文本文件内容。而字节流读取单位为byte.byte作为计算机存储最基本单位,可以用字节流来读取很多其他格式的文件,比如图片视频等等。基于B/S和C/S的文件传输都可以采用字节流的形式。在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流。只是读写文件,和文件内容无关的,一般选择字节流。 (注:除了字符和字节流之外,java还有一种叫对象流。有兴趣可以去查API学习一下。

字节流就是按照字节来进行传输,字符流是按照字符来传输.最基本的是字节流,字符流可以说是对字节流的一个包装流.比如你知道了一个字符是8个字节,那么你让字节流一次传输8个字节,那不就相当于一次传输一个字符,也就是字符流了。

    /**
     * 通过字节流的方式写入信息到文件
     *
     * Step 1.根据文件路径,构建文件对象
     * Step 2.创建字节输出流写出信息到文件
     * Step 3.构造待写出的内容,并转为字节数组
     * Step 4.关闭读取文件的字符输出流
     */
    public static void writeFileByFileOutputStream(String storePath,String outInfo) {

        // 创建写出文件
        File file = new File(storePath);
       if(!file.getParentFile().exists()){
            try{
                file.getParentFile().mkdir();
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        // 初始化字节输出流
        OutputStream outputStream = null;

        // 转成字节数组
        byte[] byteArray = outInfo.getBytes();
        try {
            // 创建输出字节流
            outputStream = new FileOutputStream(file,true);
            outputStream.write(byteArray);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if (outputStream != null) {
                try {
                    // 关闭写出流时,注意抓异常
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

通过字符流的方式写入信息到文件

/**
     * 通过字符流的方式写入信息到文件
     *
     * Step 1.根据文件路径,构建文件对象
     * Step 2.创建字符输出流写出信息到文件
     * Step 3.构造待写出的内容,并转为字符数组
     * Step 4.关闭读取文件的字符输出流
     */
    public static void writeFileByFileWriter(String storePath,String strInfo){

        // 创建写出文件
        File file = new File(storePath);
        if(!file.exists()){
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        // 初始化字符输出流
        Writer fileWriter = null;

        try {
            // 创建输出字符流
            fileWriter = new FileWriter(file,true);
            // 写出内容
            fileWriter.write(strInfo);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(fileWriter != null){
                try {
                    // 关闭写出流时,注意抓异常
                    fileWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

pdf 转图片 #

添加依赖

  <dependency>
            <groupId>org.icepdf.os</groupId>
            <artifactId>icepdf-core</artifactId>
            <version>6.2.2</version>
        </dependency>

工具类

 public static List<BufferedImage> pdf2Pic(InputStream in) throws Exception {
        Document document = new Document();
        document.setInputStream(in,"src/main/resources");
        //缩放比例
        float scale = 2.5f;
        //旋转角度
        float rotation = 0f;
        List<BufferedImage> collect = IntStream.range(0, document.getNumberOfPages()).mapToObj(
                i -> {
                    try {
                        BufferedImage pageImage = (BufferedImage) document.getPageImage(
                                i, GraphicsRenderingHints.SCREEN,
                                Page.BOUNDARY_CROPBOX, rotation, scale);
                        return pageImage;
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    return null;
                }
        ).collect(Collectors.toList());

        document.dispose();
        return collect;
    }

树结构 #

public List<SysDictData> anyMethod(String dictType) {
        QueryWrapper<SysDictData> wrapper = new QueryWrapper<>();
        wrapper.eq("dict_type",dictType);
        List<SysDictData> list = sysDictDataMapper.selectList(wrapper);

        List<SysDictData> parent = list.stream().filter(sysDictData ->
                sysDictData.getParentCode().equals("0")).collect(Collectors.toList());

        List<SysDictData>  res= findChildren(list,parent);

        System.out.println(res);
        return res;
    }

    private List<SysDictData> findChildren(List<SysDictData>  list,List<SysDictData> parent) {
        parent.forEach(sysDictData -> {
            // 子节点集合
            List<SysDictData> collect = list.stream()
                  .filter(sys -> sys.getParentCode()
                          .equals(sysDictData.getDictCode()))
                                .collect(Collectors.toList());
            sysDictData.setChildren(collect);
            findChildren(list,collect);
                }

        );

        return parent;
    }
阅读:31 . 字数:773 发布于 4 个月前
Copyright 2018-2020 Siques