欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

(javase)使用io流和多线程编写一个小程序

程序员文章站 2022-07-14 23:18:30
...

    这学期学校举办的网络文化节快要开始了,今年准备参与一下作为信工系的学子参赛自然想有着参赛作品能体现本专业的特色。本次网络文化节的主题是:青春向党,奋斗强国。于是我就想到可以使用上学期学到的javase做一个小项目。正好也可以归纳总结一下以前学习的知识。

    网络文化节:
     需要知识: java 基本语法,方法 ,面向对象思想,异常,IO流,多线程
     功能:启动程序会自动打开本机记事本,边播放音乐边自动输入提前设定好的文本内容。
     具体实现方法:

 第一个类:show

package com.zhaoshuzheng;

import java.awt.*;
import java.awt.datatransfer.StringSelection;
import java.awt.event.KeyEvent;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Random;

public class Show {
    public static void main(String[] args) throws IOException {
        //打开记事本,使用了单例模式(饿汉模式)
        Runtime rt = Runtime.getRuntime();
        //打开cmd执行notepad(这样会打开记事本)
        rt.exec("notepad");


        //如果都在主线程中执行那么放音乐跟文本显示字体会不同步进行,所以创建一个新线程
        Thread thread = new Thread(()->{
            //读取文件之前先放音乐烘托一下气氛


            //播放音乐
            MusicUtil.play("G:\\BaiduNetdiskDownload\\网络文化节\\src\\李旭昊 - 钢铁洪流进行曲.mp3");
        });
        thread.start();



        //延时一下
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        //读取文件
        readFile("G:\\BaiduNetdiskDownload\\网络文化节\\src\\歌颂祖国.txt");

    }

    /**
     * 采用字符流读取文件
     * @param path 文件的路径
     */

    public static void readFile(String path){
        //使用字符流读取文件中的内容
        //自动关闭 try with resources
        try (FileReader fr = new FileReader(path)){
            int c;
            while ((c=fr.read()) !=-1){
               copyAndPaste(String.valueOf((char)c));

            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    /**
     * 将数据粘贴到文件中
     * @param str
     */
    public static void copyAndPaste(String str){
        //ctrl c
        //创建StringSelection对象,将str放入
        //快捷键查看一个类的集成结果图*****************ctrl+alt+o
        StringSelection stringSelection = new StringSelection(str);
        //Toolkit中可以将数据放到剪切板中
        //java.awt包下
        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection,stringSelection);

        //ctrl v
        //通过Robot个类就可以模拟键盘的输入
        Robot robot=null;
        try {
             robot = new Robot();
        } catch (AWTException e) {
            e.printStackTrace();
        }

        //按下ctrl v
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_V);
        //松开(释放)ctrl v
        robot.keyRelease(KeyEvent.VK_CONTROL);
        robot.keyRelease(KeyEvent.VK_V);

        //这里用到随机数,因为要是固定好的时间给人感觉会像机器写死的(随机的延迟一下)
        Random random = new Random();
        int delay = random.nextInt(300);
        if(delay<200){
            delay+=100;
        }
        robot.delay(delay);
    }
}

   第二个类:MusicUtil(其中这个音乐工具类中使用到了第三方编写的jar包)

//相当于将音乐文件放到播放器中(第三方jar包您如果需要请在评论区留下你的邮箱我看见会及时发给你的)
Player player = new Player(new FileInputStream(new File(path)));
//播放
player.play();
package com.zhaoshuzheng;

import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

/**
 * 播放音乐
 */

public class MusicUtil {
    public static void play(String path){
        try {
            //相当于将音乐文件放到播放器中
            Player player = new Player(new FileInputStream(new File(path)));
            //播放
            player.play();
        } catch (JavaLayerException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

    }
}
  我发表的内容有错误或者遇到什么问题您可以留言联系我,我会及时处理谢谢。

              

相关标签: javase java