解説動画
監視プログラムに音声通知を追加します。
この例では、前回作ったログ監視にwaveファイルの再生を追加しています。
■動画はこちら
■Youtube版の解説で使用しているソースコード
動画と一緒にこちらも参考にどうぞ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.text.SimpleDateFormat; import java.util.Date; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.Clip; import javax.sound.sampled.DataLine; public class ExceptionMonitorTest2 { //監視フォルダ private static final String TARGET_DIR = "D:\\work\\log"; //音声ファイル private static final String WAV_FILE_NAME = "D:\\work\\test.wav"; public static void main(String[] args) { try { while(true) { //現在時刻(時分秒)を取得 String time = new SimpleDateFormat("HH:mm:ss ").format(new Date()); //フォルダのファイルをリストアップ String[] files = new File(TARGET_DIR).list(); //監視中の件数を表示 System.out.println(time + "監視中... ファイル件数[" + files.length + "]"); //ログファイルができたら、ファイルを表示。音を鳴らして、終了。 if(files.length > 0) { print(time, files); //ファイルを表示 playSound(); //音声ファイルを再生 return ; } //10秒間スリーブ Thread.sleep(10000); } }catch(Exception e) { e.printStackTrace(); } } public static void print(String time, String[] files) throws Exception { //できたファイルの中身を表示 for(int i=0 ; i<files.length ; i++) { //できたファイル名 String fileName = files[i]; //ファイル名とファイルの中身を表示 System.out.println("-- " + fileName + "-----------------------"); try(FileReader fr = new FileReader(TARGET_DIR + "\\" + fileName); BufferedReader br = new BufferedReader(fr);) { String line = null; while((line = br.readLine()) != null) { System.out.println(line); } } } System.out.println(time + "監視終了..."); } public static void playSound() throws Exception { //音声ファイルを指定 try(AudioInputStream ais = AudioSystem.getAudioInputStream(new File(WAV_FILE_NAME))){ //音声ファイルのメディア情報を取得 AudioFormat af = ais.getFormat(); //プレイヤー(クリップ)を作成 DataLine.Info info = new DataLine.Info(Clip.class, af); Clip clip = (Clip)AudioSystem.getLine(info); //再生(繰り返さない) clip.open(ais); clip.loop(0); clip.flush(); //再生が終わるまで待つ。 while(clip.isActive()) { Thread.sleep(100); } } } } |