用IDEA弹奏《起风了》伴奏音乐 Java语言 <源码分享> GitHub有趣的小项目

海康视觉平台VisionMaster实战入门:从通讯配置到工具应用 本文为海康VisionMaster视觉平台实战入门指南,详细介绍了从软件安装准备、与PLC等外部设备的通讯配置,到匹配定位、测量、畸变矫正等核心工具的应用方法。通过实战案例拆解,帮助工程师快速掌握如何搭建完整的机器视觉检测与引导定位系统,实现工业自动化项目落地。 阅读详情

本代码搬运b站上一位up主的

github的地址:GitHub - gulihua10010/playPiano: Java弹奏钢琴乐曲

项目结构如下:

 首先是play包下三个类文件:

 Animation:

package cn.jianwoo.play;

/**
 * @author gulihua
 * @Description
 * @date 2022-11-15 00:58
 */
public class Animation extends Thread{

    /** 音符 */
    private String[] notes;
    /** 间隔时间(单位:毫秒) */
    private int times;

    public Animation(int times) {
        this.times = times;
    }

    public Animation(String[] notes, int times) {
        this.notes = notes;
        this.times = times;
    }

    public String[] getNotes() {
        return this.notes;
    }

    public void setNotes(String[] notes) {
        this.notes = notes;
    }

    public int getTimes() {
        return this.times;
    }

    public void setTimes(int times) {
        this.times = times;
    }

    public Animation loadNotes(String notes) {
        this.notes = notes.split(" ");
        return this;
    }

    @Override
    public void run() {
        try {
            int times = this.times;
            new Audio("audio/test.mp3").start();
            sleep(1000);
            int no = 1;
//            System.out.print(no+": ");
            for (int i = 0; i < this.notes.length; i++)
            {
                if (notes[i].length()<1){
                    continue;
                }
                String n = this.notes[i].replace("+","").replace("-","");
                if (n.equals("\n")||n.equals("\r")){
                    System.out.print("\n");
                    no++;
//                    System.out.print(no+": ");
                    continue;
                }
                switch (n)
                {
                    case "0":
                        System.out.print("_");
                        break;
                    case "1":
                        System.out.print("▁");
                        break;
                    case "2":
                        System.out.print("▂");
                        break;
                    case "3":
                        System.out.print("▃");
                        break;
                    case "4":
                        System.out.print("▄");
                        break;
                    case "5":
                        System.out.print("▅");
                        break;
                    case "6":
                        System.out.print("▆");
                        break;
                    case "7":
                        System.out.print("▇");
                        break;
                }
                System.out.print(" ");
                sleep(times);
            }
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }

    }
}

Audio: 

package cn.jianwoo.play;

import java.io.InputStream;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import cn.hutool.core.io.resource.ResourceUtil;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;

public class Audio
{
    private static InputStream is;
    private Player player;
    ExecutorService service = Executors.newCachedThreadPool();

    public Audio(String path)
    {
        is = ResourceUtil.getStream(path);
        try
        {
            player = new Player(is);
        }
        catch (JavaLayerException e)
        {
            e.printStackTrace();
        }
    }


    public void start()
    {
        service.submit(() -> {
            try
            {
                player.play();
            }
            catch (JavaLayerException e)
            {

            }
        });

    }
}

AudioPlay:

package cn.jianwoo.play;

import cn.hutool.core.io.FileUtil;

/**
 * @author gulihua
 * @Description
 * @date 2022-11-12 18:24
 */
public class AudioPlay extends Thread
{
    /** 音符 */
    private String[] notes;
    /** 间隔时间(单位:毫秒) */
    private int times;
    /** 模式 */
    private Mode mode;

    public AudioPlay(String[] notes, int times)
    {
        this.notes = notes;
        this.times = times;
    }


    public AudioPlay(String[] notes, int times, Mode mode)
    {
        this.notes = notes;
        this.times = times;
        this.mode = mode;
    }

    public AudioPlay(String filePath, int times)
    {
        String content = FileUtil.readString(filePath,"UTF-8");
        this.notes = content.split(" ");
        this.times = times;
    }

    public AudioPlay(int times)
    {
        this.times = times;
    }

    public Mode getMode()
    {
        return this.mode;
    }


    public void setMode(Mode mode)
    {
        this.mode = mode;
    }


    public String[] getNotes()
    {
        return this.notes;
    }


    public void setNotes(String[] notes)
    {
        this.notes = notes;
    }
    public AudioPlay loadNotes(String notes)
    {
        this.notes = notes.split(" ");
        return this;
    }


    public int getTimes()
    {
        return this.times;
    }


    public void setTimes(int times)
    {
        this.times = times;
    }


    @Override
    public void run()
    {
        try
        {
            int times = this.times;
            new Audio("audio/test.mp3").start();
            sleep(1000);
            for (int i = 0; i < notes.length; i++)
            {
                if (notes[i].length()<1){
                    continue;
                }
                switch (notes[i])
                {
                case "1--":
                    new Audio("audio/ll1.mp3").start();
                    sleep(times / 2);
                    break;
                case "2--":
                    new Audio("audio/ll2.mp3").start();
                    sleep(times / 2);
                    break;
                case "3--":
                    new Audio("audio/ll3.mp3").start();
                    sleep(times / 2);
                    break;
                case "4--":
                    new Audio("audio/ll4.mp3").start();
                    sleep(times / 2);
                    break;
                case "5--":
                    new Audio("audio/ll5.mp3").start();
                    sleep(times / 2);
                    break;
                case "6--":
                    new Audio("audio/ll6.mp3").start();
                    sleep(times / 2);
                    break;
                case "7--":
                    new Audio("audio/ll7.mp3").start();
                    sleep(times / 2);
                    break;
                case "1-":
                    new Audio("audio/l1.mp3").start();
                    sleep(times / 2);
                    break;
                case "2-":
                    new Audio("audio/l2.mp3").start();
                    sleep(times / 2);
                    break;
                case "3-":
                    new Audio("audio/l3.mp3").start();
                    sleep(times / 2);
                    break;
                case "4-":
                    new Audio("audio/l4.mp3").start();
                    sleep(times / 2);
                    break;
                case "5-":
                    new Audio("audio/l5.mp3").start();
                    sleep(times / 2);
                    break;
                case "6-":
                    new Audio("audio/l6.mp3").start();
                    sleep(times / 2);
                    break;
                case "7-":
                    new Audio("audio/l7.mp3").start();
                    sleep(times / 2);
                    break;
                case "1":
                    new Audio("audio/m1.mp3").start();
                    sleep(times / 2);
                    break;
                case "2":
                    new Audio("audio/m2.mp3").start();
                    sleep(times / 2);
                    break;
                case "3":
                    new Audio("audio/m3.mp3").start();
                    sleep(times / 2);
                    break;
                case "4":
                    new Audio("audio/m4.mp3").start();
                    sleep(times / 2);
                    break;
                case "5":
                    new Audio("audio/m5.mp3").start();
                    sleep(times / 2);
                    break;
                case "6":
                    new Audio("audio/m6.mp3").start();
                    sleep(times / 2);
                    break;
                case "7":
                    new Audio("audio/m7.mp3").start();
                    sleep(times / 2);
                    break;
                case "1+":
                    new Audio("audio/h1.mp3").start();
                    sleep(times / 2);
                    break;
                case "2+":
                    new Audio("audio/h2.mp3").start();
                    sleep(times / 2);
                    break;
                case "3+":
                    new Audio("audio/h3.mp3").start();
                    sleep(times / 2);
                    break;
                case "4+":
                    new Audio("audio/h4.mp3").start();
                    sleep(times / 2);
                    break;
                case "5+":
                    new Audio("audio/h5.mp3").start();
                    sleep(times / 2);
                    break;
                case "6+":
                    new Audio("audio/h6.mp3").start();
                    sleep(times / 2);
                    break;
                case "7+":
                    new Audio("audio/h7.mp3").start();
                    sleep(times / 2);
                    break;
                case "1++":
                    new Audio("audio/hh1.mp3").start();
                    sleep(times / 2);
                    break;
                case "2++":
                    new Audio("audio/hh2.mp3").start();
                    sleep(times / 2);
                    break;
                case "3++":
                    new Audio("audio/hh3.mp3").start();
                    sleep(times / 2);
                    break;
                case "4++":
                    new Audio("audio/hh4.mp3").start();
                    sleep(times / 2);
                    break;
                case "5++":
                    new Audio("audio/hh5.mp3").start();
                    sleep(times / 2);
                    break;
                case "6++":
                    new Audio("audio/hh6.mp3").start();
                    sleep(times / 2);
                    break;
                case "7++":
                    new Audio("audio/hh7.mp3").start();
                    sleep(times / 2);
                    break;
                case "0":
                    sleep(times / 2);
                    break;
                default:
                    continue;
                }
                sleep(times / 2);
                times = this.times;
            }

        }
        catch (Exception e)
        {
            throw new RuntimeException(e);
        }

    }

    enum Mode {
        /** 主奏 */
        MAIN,
        /** 伴奏 */
        ACCOMPANIMENTS

    }
}

测试类:

package cn.jianwoo.test;

import cn.jianwoo.play.Animation;
import cn.jianwoo.play.AudioPlay;

import java.io.File;

/**
 * @author gulihua
 * @Description
 * @date 2022-11-13 17:52
 */
public class Test1 {
    public static void main(String[] args) {
        String path =
                new File("").getAbsolutePath() + File.separator + "src/main/resources/notes" + File.separator;
        String notes =
                " 7-  1   2   3   0   5-  5   3   0   0   0   0   0   0   0   0 \n" +
                        " 7-  1   2   3   0   5-  5   3   2   3   1   2   7-  1   5-  0 \n" +
                        " 7-  1   2   3   0   5-  5   3   0   0   0   0   0   0   0   0 \n" +
                        " 7-  1   2   3   0   5-  5   3   2   3   1   2   7-  1   5-  0 \n" +
                        " 7   1+  2+  3+  0   5   5+  3+  0   0   0   0   0   0   0   0 \n" +
                        " 7   1+  2+  3+  0   5   5+  3+  2+  3+  1+  2+  7   1+  5   0 \n" +
                        " 7   1+  2+  3+  0   5   5+  3+  0   0   0   0   0   0   0   0 \n" +
                        " 2   0   0   0   0   0   0   0   1   0   0   0   0   0   0   0 \n" +

                        " 2   0   0   1   2   0   0   1   2   0   3   0   5   0   3   0   \n" +
                        " 2   0   0   1   2   0   0   1   2   3   2   1   6-  0   0   0   \n" +
                        " 2   0   0   1   2   0   0   1   2   0   3   0   5   0   3   0   \n" +
                        " 2   0   0   3   2   0   1   2   2   0   0   0   0   0   0   0   \n" +
                        " 2   0   0   1   2   0   0   1   2   0   3   0   5   0   3   0   \n" +
                        " 2   0   0   3   2   0   1   0   6-  0   0   0   \n" +
                        " 3   2   1   2   1   0   0   0   \n" +
                        " 3   2   1   2   1   0   0   \n" +
                        " 5-  3   2   1   2   0   0   1   0   0   0   0   0   \n" +
                        " 1   0   2   0   3   0   1   0   6   0   5   6   0   0   0   \n" +
                        " 2   7   0   6   7   0   0   0   0   \n" +
                        " 7   0   6   7   0   0   3   0   1+  2+  1+  7   6   0   0   \n" +
                        " 5   6   0   5   6   0   5   6   5   6   0   5   1   0   5   0   3   3   0   0   0   0   0   0   0   \n" +
                        " 1   0   2   0   3   0   1   0   6   0   5   6   0   0   0   \n" +
                        " 2   7   0   6   7   0   0   0   0   \n" +
                        " 7   0   6   7   0   0   3   0   1+  2+  1+  7   6   0   0   \n" +
                        " 5   6   0   3+  3+  0   0   5   0   6   0   3+  3+  0   \n" +
                        " 5   0   6   6   0   3-  0   3-  0   3-  0   3-  0   0   0   \n" +
                        " 1+  0   2+  0   3+  0   6+  5+  0   0   6+  5+  0   0   6+  5+  0   2+  0   0   \n" +
                        " 3+  0   6+  5+  0   0   6+  5+  0   0   6+  5+  0   3+  0   0   \n" +
                        " 2+  0   1+  6   0   1+  0   1+  2+  0   1+  6   0   0   1+  0   3+  0   0   0   0   0   3+  0   2+  0   0   0   \n" +
                        " 1+  0   2+  0   3+  0   6+  5+  0   0   6+  5+  0   0   6+  5+  0   0   \n" +
                        " 2+  0   3+  0   6+  5+  0   0   6+  5+  0   0   6+  5+  0   0   \n" +
                        " 3+  0   2+  0   1+  6   0   0   3+  0   2+  0   1+  \n" +
                        " 6   0   1+  0   0   1+  0   0   0   0   0   0   0   0   0   0   0   \n" +
                        " 6   3+  0   0   2+  0   1+  6   0   3+  0   0   2+  0   1+  \n" +
                        " 6   0   1+  0   0   1+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   \n" +
                        " 7   1+  2+  3+  0   5   5+  3+  2+  3+  7   1+  6   7   5   0   \n" +
                        " 7   1+  2+  3+  0   5   5+  3+  0   0   0   0   0   0   0   0   \n" +
                        " 6+  3+  2+  6   3   6   2+  3+  6+  0   0   0   0   0   0   0 \n ";

        String accompaniments =
                "  4-- 0   1-  0   3-  0   0   0   5-- 0   7-- 0   2-  0   0   0 \n" +
                        " 3-- 0   7-- 0   2-  0   0   0   6-- 0   1-  0   3-  0   0   0 \n" +
                        " 4-- 0   1-  0   3-  0   0   0   5-- 0   7-- 0   2-  0   0   0 \n" +
                        " 3-- 0   7-- 0   2-  0   0   0   6-- 0   1-  0   3-  0   0   0 \n" +
                        " 4-  0   1-  0   3-  0   0   0   5-- 0   7-- 0   2-  0   0   0  \n" +
                        " 3-- 0   7-- 0   2-  0   0   0   6-- 0   1-  0   3-  0   0   0  \n" +
                        " 4-- 0   1-  0   3-  0   0   0   5-- 0   7-- 0   2-  0   0   0  \n" +
                        " 3-  0   0   0   0   0   0   0   1-  0   0   0   0   0   0   0  \n " +

                        "1-- 0   0   0   3-  0   0   0   3-  0   0   0   3-  0   0   0   \n" +
                        " 7-- 0   0   0   2-  0   0   0   2-  0   0   0   2-  0   0   0   \n" +
                        " 7-- 0   0   0   2-  0   0   0   2-  0   0   0   2-  0   0   0   4-- \n" +
                        " 0   0   0   4-  0   0   0   4-  0   0   0   4-  0   0   0 \n " +
                        " 2-- 0   0   0   2-  0   0   0   5-- 0   0   0   2-  0   0   0   6-- 0   0   0   3-  0   0   0   6-- 0   0   0   \n" +
                        " 0   0   0   0   4-- 0   0   0   \n" +
                        " 0   0   0   0   4-  0   0   \n" +
                        " 0   0   0   0   0   1-- 0   5-- 0   1-  0   3-  0   \n" +
                        " 1   0   0   0   1-  0   0   0   4-- 1-  4-  6-  1   0   4-  \n" +
                        " 0   5-- 2-  5-  7-  2   0   5-  0   \n" +
                        " 3-- 7-- 3-  5-  7-  0   0   0   6-- 3-  6-  3-  1   0   0   \n" +
                        " 0   4-- 1-  4-  6-  1   0   4-  0   5-- 2-  5-  7-  2-  0   5-  0   1-- 5-- 1-  3-  5-  0   3-  0   \n" +
                        " 1   0   0   0   5-  0   0   0   4-- 1-  4-  1-  6-  0   1-  \n" +
                        " 0   5-- 2-  5-  2-  7-  0   2-  0   \n" +
                        " 3-- 7-- 3-  5-  7-  0   3-  0   6-- 3-  6-  3-  1   0   3-  \n" +
                        " 0   4-- 1-  4-  6-  3   0   4-  0   5-- 2-  5-  7-  2   0   \n" +
                        " 5-  0   6-- 0   6-- 0   6-- 0   6-- 0   6-- 0   0   0   \n" +
                        " 0   0   0   0   4-- 0   1-  0   4-  0   0   0   5-- 0   2-  0   5-  0   0   0   \n" +
                        " 3-- 0   7-- 0   3-  0   0   0   6-- 0   3-  0   6-  0   0   0   \n" +
                        " 4-- 0   1-  0   4-  0   0   0   5-- 0   2-  0   5-  0   0   0   \n" +
                        " 1-  0   5-  0   1   0   0   0   3-  0   7-  0   \n" +
                        " 3   0   0   0   4-- 0   1-  0   4-  0   0   0   5-- 0   2-  0   5-  0   0   \n" +
                        " 0   3-- 0   7-- 0   3-  0   0   0   6-- 0   3-  0   6-  0   \n" +
                        " 0   0   4-- 0   1-  0   4-  0   0   0   5-- 0   2-  0   5-  0   0   \n" +
                        " 0   1-  0   5-  0   1   0   5-  0   3-  0   0   0   \n" +
                        " 0   0   0   0   4-- 0   0   0   0   0   0   0   5-- 0   0   0   0   0   0   0   \n" +
                        " 4-- 0   1-  0   6-  0   1-  0   5-- 0   2-  0   5-  0   2-  0   \n" +
                        " 3-- 0   7-- 0   5-  0   7-- 0   6-- 0   3-  0   1   0   3-  0   \n" +
                        " 4-- 0   1-  0   6-  0   1-  0   5-- 0   2-  0   7-  0   2-  0   \n" +
                        " 6-- 0   3-  0   6-  0   3-  0   1   0   0   0   3-  0   0   0 \n ";
        String note1 =


                "" +
                        "   2   0   0   1   2   0   0   1   2   0   3   0   5   0   3   0  \n" +
                        " 2   0   0   1   2   0   0   1   2   3   2   1   5-  0   0   0 \n" +
                        " 2   0   0   1   2   0   0   1   2   0   3   0   5   0   3   0 \n" +
                        " 2   0   0   3   2   0   1   0   2   0   0   0   0   0   0   0 \n" +
                        " 2   0   0   1   2   0   0   1   2   0   3   0   5   0   3   0  \n" +
                        " 2   0   0   3   2   0   1   0   6-  0   0   0   3   2   1   2 \n" +
                        " 1   0   0   0   3   2   1   2   1   0   0   5-  3   2   1   2 \n" +
                        " 1   0   0   0   0   0   0   0   1   0   2   0   3   0   1   0 \n" +
                        " 6   0   5   6   0   0   0   1   7   0   6   7   0   0   0   0 \n" +
                        " 7   0   6   7   0   0   3   0   1+  2+  1+  7   6   0   5   0 \n" +
                        " 6   0   5   6   0   5   6   5   6   0   5   2   0   5   0   0 \n" +
                        " 3   0   0   0   0   0   0   0   1   0   2   0   3   0   1   0 \n" +
                        " 6   0   5   6   0   0   0   1   7   0   6   7   0   0   0   0 \n" +
                        " 7   0   6   7   0   0   3   0   1+  2+  1+  7   6   0   5   0 \n" +
                        " 6   0   3+  3+  0   0   5   0   6   0   3+  3+  0   5   0   6 \n" +
                        " 6   0   0   0   0   0   0   0   0   0   0   0   1+  0   2+  0 \n" +
                        " 3+  0   6+  5+  0   0   6+  5+  0   0   6+  5+  0   0   2+  3+ \n" +
                        " 0   0   6+  5+  0   0   6+  5+  0   0   6+  5+  0   3+  0   0 \n" +
                        " 2+  0   1+  6   0   1+  0   0   2+  0   1+  6   0   1+  0   0 \n" +
                        " 3+  0   0   0   0   4+  3+  0   3+  2+  0   0   1+  0   2+  0 \n" +
                        " 3+  0   6+  5+  0   0   6+  5+  0   0   6+  5+  0   0   2+  0  \n" +
                        " 3+  0   6+  5+  0   0   6+  5+  0   0   6+  5+  0   3+  0   0 \n" +
                        " 2+  0   1+  6   0   3+  0   0   2+  0   1+  6   0   1+  0   0 \n" +
                        " 1+  0   0   0   0   0   0   0   0   0   0   0   6   3+  0   0 \n" +
                        " 2+  0   0   0   1+  0   6   0   0   0   3+  0   0   0   0   0 \n" +
                        " 2+  0   0   0   1+  0   6   0   0   0   1+  0   0   0   0   0 \n" +
                        " 1+  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 \n" +
                        " 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0  \n";
        String accompaniments1 =


                "   1-- 0   0   0   3-  0   0   0   3-  0   0   0   3-  0   0   0   \n" +
                        " 7-- 0   0   0   2-  0   0   0   2-  0   0   0   2-  0   0   0   \n" +
                        " 7-- 0   0   0   2-  0   0   0   2-  0   0   0   2-  0   0   0   \n" +
                        " 4-- 0   0   0   4-  0   0   0   4-  0   0   0   4-  0   0   0 \n" +
                        " 2-- 0   0   0   2-  0   0   0   5-- 0   0   0   2-  0   0   0 \n" +
                        " 6-- 0   0   0   3-  0   0   0   6-- 0   0   0   0   0   0   0 \n" +
                        " 4-- 0   0   0   0   0   0   0   5-- 0   0   0   0   0   0   0 \n" +
                        " 1-  0   0   0   0   0   0   0   1-  0   0   0   0   0   0   0 \n" +
                        " 4-- 0   0   0   0   0   0   0   5-- 0   0   0   0   0   0   0 \n" +
                        " 3-- 0   0   0   0   0   0   0   6-- 0   0   0   0   0   0   0 \n" +
                        " 4-- 0   0   0   0   0   0   0   5-- 0   0   0   0   0   0   0 \n" +
                        " 1-  0   0   0   0   0   0   0   1-  0   0   0   0   0   0   0 \n" +
                        " 4-- 0   0   0   0   0   0   0   5-- 0   0   0   0   0   0   0 \n" +
                        " 3-- 0   0   0   0   0   0   0   6-- 0   0   0   0   0   0   0 \n" +
                        " 4-- 0   0   0   0   0   0   0   5-- 0   0   0   0   0   0   0 \n" +
                        " 6-- 0   0   0   3-  0   0   0   6-  0   0   0   0   0   0   0 \n" +
                        " 4-- 0   0   0   4-  0   0   0   5-- 0   0   0   5-  0   0   0 \n" +
                        " 3-- 0   0   0   3-  0   0   0   6-- 0   0   0   6-  0   0   0 \n" +
                        " 4-- 0   0   0   4-  0   0   0   5-- 0   0   0   5-  0   0   0 \n" +
                        " 1-- 0   0   0   1-  0   0   0   3-- 0   0   0   3-  0   0   0 \n" +
                        " 4-- 0   0   0   4-  0   0   0   5-- 0   0   0   5-  0   0   0 \n" +
                        " 3-- 0   0   0   3-  0   0   0   6-- 0   0   0   6-  0   0   0 \n" +
                        " 4-- 0   0   0   4-  0   0   0   5-- 0   0   0   5-  0   0   0 \n" +
                        " 6-- 0   0   0   3-  0   0   0   6-- 0   0   0   0   0   0   0  \n" +
                        " 4-- 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 \n" +
                        " 5-- 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 \n" +
                        " 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 \n" +
                        " 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   ";

        new AudioPlay(180).loadNotes(notes + note1).start();
        new AudioPlay(180).loadNotes(accompaniments + accompaniments1).start();
        new Animation(180).loadNotes(notes + note1).start();
    }
}

演示如下:

项目中的resource文件夹在这个百度网盘链接中:

链接:https://pan.baidu.com/s/1LN6qKI0HYDmtUgbVBNc0IA?pwd=coin 
提取码:coin

Python实战:5分钟搞定抖音无水印视频下载(附完整代码) 本文系统介绍了抖音无水印视频下载的多种技术方案,重点解析了抖音视频的获取逻辑与去水印原理。文章提供了从零代码的浏览器插件到可编程的Python脚本的完整实现路径,并附带了详细的代码示例,帮助用户快速构建自己的抖音视频下载工具箱。 阅读详情

相关推荐

药物重定位实战:如何用反向找靶技术挖掘老药新用(附Python代码示例)

本文详细介绍了药物重定位中的反向找靶技术,通过分子相似性计算、机器学习模型和结构对接等方法,挖掘已有药物的新治疗潜力。附Python代码示例,帮助读者快速实现从分子结构到潜在靶标的智能预测,显著提升药物研发效率。

weixin_28726671的博客 259

14《hutool实战》:ResourceUtil 资源工具(JAVA 小虚竹)

ResourceUtil 资源工具(JAVA java 小虚竹)

小虚竹的专栏 2万+

BRep实战指南:从理论到文件格式的全面解析

本文全面解析BRep(边界表示法)从基础概念到文件格式的实战应用。详细介绍了BRep的数学定义、工业应用场景,以及STEP、IGES等主流文件格式的对比与使用技巧,帮助读者掌握三维建模核心技术并优化性能。

weixin_29235923的博客 406

利用java演奏起风了

上一次用python演奏了lemon,但是效果不是特别理想,因为断断续续的,给女朋友听了都没有听出来,所以重新去用java写一个,希望她开开心心,愿她还是那个初闯世间的少年,意气风发的模样,从前初识这世间,万般流连,也甘愿赴汤蹈火去走他一遍,这种字里行间的自信和神采总会给人热血澎湃的感觉,不禁想起自己曾经的年少轻狂,一腔热血。微凉晨光里,再次见到你,笑得很甜蜜。希望她去勇敢的面对生活中的种种困难!

kiritobryant的博客 2264

2025年CSP-J初赛真题及答案解析(完整版)

2025年CSP-J初赛真题及答案解析(完整版)

王老师青少年编程 1万+

【AI大模型应用开发】3.2 RAG实战 - RAG应用+UI实现加载本地文件并对话

前面我们实现了RAG基本流程,今天我们在此基础上给它加个UI界面,在浏览器打开,实现上传本地文件、解析,并用大模型实现与该文档的对话。也就是一个阉割版demo版的ChatPDF或知识库对话系统。

同学小张的博客 3051

Resources.getResourceAsStream(resource)找不到该方法 真实解决

问题详情 在读取配置文件时,键入InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");时发现,getResourceAsStream()方法标红,IDEA表示并没有这个方法。 本文提供真实解决方法,让你找到这个方法 问题解决 前言 在我csdn了一趟之后,很多博客都说是改成nputStream inputStream = Resources.class.getResourceAsStream(resource); 我改了,发现可

或左的博客 1万+

问题解答:如何不通过修改底层数据库表的方式,给数据库对应的数据结构,增添新的字段?

现在需要将这张表里的内容读取到 ABAP 内表里,并且针对每个行项目,增加一个新的列字段,我随便举个例子,这个列字段名称叫 LENGTH,值为 OBJ_NAME 字段的长度,使用。最笨的办法就是下面这样定义一个新的类型,这个类型的每个字段名称,都来自数据库表 TADIR 的同名字段,在末尾再增添自定义字段 length.其实我们是做 ALV 输出,只需要 ABAP 内表变量的类型,包含 TADIR 数据库表的全部字段,再加上新的 LENGTH 字段即可。这相当于多了一个中间层,没办法直接被 ALV 处理。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 476

SpringBoot整合Mybatis实现文件导入导出

在做的项目中,常常会有涉及对很多数据的操作,而经常做的就是导入和导出了,我们先来了解一下导入导出。导出:就是将你页面查询的数据导出到Excel表格,当然还有导出其他文件。导入:就是将你需要添加的数据导入到数据库。

不愧是暮言的博客 3553

uniApp微信小程序:利用live-pusher人脸活体检测功能+完整示例代码,uniapp使用live-pusher直播推流组件实现人脸验证-活体检测,检测人脸中的动作包括眨眼、张嘴、左右摇头动作

UniApp 使用 live-pusher 实现人脸活体检测(附完整源码)uniapp开发微信小程序人脸检测活体检测,在uni-app的微信小程序项目中使用live-pusher实现人脸识别,uniapp使用live-pusher实现模拟人脸识别效果,张张嘴、眨眨眼、向左摇头、向右摇头等动作,免费使用人脸活体检测的插件方案,uniapp小程序怎么免费使用人脸活体,直播推流,UNIAPP微信小程序使用live-pusher实现人脸识别(拍照)功能,在uni-app项目中实现人脸识别,既使用uni-app中的l

✅ 精选推荐文章 3013

把表的每一次改动都记下来:SAP 表变更日志 DBTABLOG/DBTABPRT 与 SCU3 全面解析

摘要:SAP系统提供了数据库表变更日志功能(SCU3/DBTABLOG),用于追踪关键配置表的变更历史。该功能通过profile参数rec/client和表级技术设置双重开关控制,能记录谁在何时修改了哪些数据。与业务变更凭证(CDHDR/CDPOS)和应用日志(SLG1)不同,表变更日志提供技术层面的审计线索,适用于快速定位生产事故中的异常数据变更。但需注意其限制:不支持超宽表和大批量变更,且可能引发性能问题。建议将表变更日志与业务变更凭证、应用日志结合使用,构建完整的审计追踪体系。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1687

3hutool实战:IoUtil 流操作工具类(从流中读取内容)

hutool实战:IO工具类(从流中读取内容) 关键字:java java JAVA hutool hutool Hutool 工具类 工具类 工具类 IoUtil IoUtil IoUtil

小虚竹的专栏 1万+

生存曲线绘制及图例标签添加(使用R语言)

数据应该包含两列:一个是表示个体生存时间的时间变量(通常称为"时间(time)“)和一个是表示个体是否发生事件(如死亡)的事件变量(通常称为"事件(event)”)。通过修改上述代码中的数据和参数,您可以根据自己的需求绘制生存曲线,并添加相应的图例信息和标签。生存曲线是在生存分析中常用的工具,用于描述一组个体随时间的存活概率。函数的第一个参数指定图例的位置,这里我们选择了右上角(“topright”)。包来进行生存曲线的绘制,并通过添加图例信息和标签来增强可视化效果。的数据框,包含这两列数据。

CyberXZ的博客 554

最详细的SpringBoot实现接口校验签名调用

验签是指第三方系统在调用接口之前,需要按照原系统的规则根据所有请求参数生成一个签名(字符串),在调用接口时携带该签名。原系统会验证签名的有效性,只有签名验证有效才能正常调用接口,否则请求会被驳回。

passerbyYSQ 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

魔改,Spring Boot Swagger UI 记住保存Token,插入自定义脚本,开启搜索框方法

灵感来源于 .net core webapi 使用Swagger UI 记住Token Respectsource:target: Resources:web/swagger-plus.html 底部添加 3-新建资源 Resources:web/swagger-plus.js工具类我就不传了,自己实现吧,当伪代码看 运行结果:/xxxx/swagger-ui/plus 准备工作已经做完了,接下来的工作就是写在Resources:web/swagger-plus.js中写js了自由发挥吧!

程序员养成计划 778

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

项目中使用临时文件夹或获取文件资源路径

1. 如果想要获取resource目录下的某个文件夹路径:注意:1.1 不能直接使用ResourceUtils.getURL("classpath:xxx").getPath(),这种会报错1.2如果resource目录下的那个文件夹是一个空文件夹,那么上linux后,无法在其中创建文件,因为打包的时候会忽略空文件夹,即target下不会有对应的文件夹,此时如果想在代码中实时创建这个文件夹又会没有权限解决方式:在那个临时文件夹下再放个临时文件,这样打包的时候也会自动创建临时文件夹。

weixin_38312502的博客 1872

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

分分钟教你读取 resources 目录下的文件路径

前情提要本文中提供了九种方式获取resources目录下文件的方式。其中打印文件的方法如下:/***根据文件路径读取文件内容**@paramfileInPath*@throwsIOException*/publicstaticvoidgetFileContent(ObjectfileInPath)throwsIOException{BufferedReaderbr=null;if(fileInPath==null){return...

资料免费分享,点击名片 959

IDEA getResourceAsStream 为null 问题解决

查找在统一级目录下的资源文件test.txt LoadResourceUtil类实现如下: public class LoadResourceUtil { void load(){ InputStream inputStream = LoadResourceUtil.class.getResourceAsStream("test.txt"); System.out.println("inputStream = " + inputStream); }

隔壁老王呀的专栏 1867

java(包括springboot)读取resources下文件方式

java(包括springboot)读取resources下文件方式 1、使用项目内路径读取,该路径只在开发工具中显示,类似:src/main/resources/resource.properties。只能在开发工具中使用,部署之后无法读取。(不通用)   File file = new File("src/main/resources/resource.properties");   @Test public void testReadFile2() throws I

lixinghui2016的博客 671

使用 ResourceUtil.getReader()时提示没有找到指定文件

错误原因 其中getReader(@NotNull String resource, java.nio.charset.Charset charset) 对resource的位置先进行绝对路径判断,如果没找到会进行相对路径查找。 ResourceUtil.getReader( "/${ if (tplName.toLowerCase().endsWith(".sql")) { tplNa

LCGGood的博客 945

java runtime getinputstream,Java Resource.getInputStream方法代碼示例

本文整理匯總了Java中org.springframework.core.io.Resource.getInputStream方法的典型用法代碼示例。如果您正苦於以下問題:Java Resource.getInputStream方法的具體用法?Java Resource.getInputStream怎麽用?Java Resource.getInputStream使用的例子?那麽恭喜您, 這裏精選的...

weixin_34711121的博客 826

文件上传下载

package com.daling.util.file; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File...

chennanyin0248的博客 142

用Java弹个Freepiano钢琴《The truth that you leave》

用Java弹个Freepiano钢琴《The truth that you leave》

qq_44844942的博客 1164

java从小白到小白(基于github大佬的java PlayPiano)

本篇内容通过一个git源码,带入式沉浸体验讲解maven入门初阶

weixin_44351992的博客 1346

用 Java 演奏《千千阙歌》是什么体验?

​JFugue 是一个开放源代码编程库,它允许人们使用 Java 编程语言来编程音乐,而无需 MIDI 的复杂性。它由 David Koelle 于 2002 年首次发布。当前版本是 JFugue 5.0,已于 2015 年 3 月发布。Brian Eubanks 将 JFugue 描述为 “对于需要快速便捷地播放音乐或生成 MIDI 文件的应用程序有用”。JFugue 是根据 Apache License 发布的免费软件。 ​

桃子同学的博客 1191

Java 死,前端凉?!斗胆说点真话

大家好,我是鱼皮,上次直播的时候有同学问我:怎么看待 “Java 已死、前端已凉” 的言论?我其实一直不太想回答这种问题,因为一个人一个看法,争议会比较大,但是最近看到身边有一些同学 “无脑转行” 的情况,还是决定来客观分析下这个问题。推荐观看视频版:https://www.bilibili.com/video/BV1YN411J74Y/

努力做最接地气的编程干货分享,感谢关注 1万+
上一篇: python 爱心代码
下一篇: 数据库系统概论常考简答题,常考概念资料梳理
jakeonil
博客等级 码龄5年 1万+粉丝 60原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jakeonil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值