黑马程序员技术交流社区

标题: 写给还未看完视频朋友们的小程序 附源码 [打印本页]

作者: 程序猿    时间: 2012-5-8 13:32
标题: 写给还未看完视频朋友们的小程序 附源码
本帖最后由 欧阳梦南 于 2012-5-9 02:32 编辑

在学习黑马视频的过程中,很喜欢黑马的视频命名方式,每个视频都会在名称上告诉你这个视频所讲的内容,这样对于我们以后进行针对复习和查找提供了很多便利。但这也造成了每个视频长度偏短,视频数量过多。这样就很难把握自己学了多少,还有多少没学,以及视频一共多长时间等信息。我曾记得用windows批量点中后—>属性,会显示总的视频时间,但可能是指定格式才可以显示,反正没成功。我自己用的qq影音、暴风影音也不能显示多个视频的总时间(其他播放器没试)。无奈到网上搜索相应的软件,也没有找到。

想到正好自己在学习编程就自己写一个吧,到网上找相关代码,发现都是利用什么JMF,FFMPEG,QuickTime-API什么的,反正是看不懂。此时发现一博客(http://jatula.iteye.com/blog/259328)有关于利用DLL文件获取视频长度的程序,很简单,自己试了一下,发现可以成功,DLL文件的作者不认识,也不知道运行原理,反正就是能获取,也正好正在学File类,就自己包装了一下。为黑马的战友们献上,制定自己的学习计划。在清楚学习进度的情况下掌握好基础,并祝早日进入黑马。


以下是获取到的视频时间信息,所有黑马基础视频哦



哇塞 98小时哎~~~
其中最后的那个代表学完当前目录后的所学百分比。 快看看你们都学完多少了。





附上源码吧~ 来个分割线,如果想玩一玩程序,可以往下看哦

-----------------------------------------------------------------------分割线--------------------------------------------------------------------
  1. class CtrlFtpFile {
  2. public int time=0;


  3. //读取Dll
  4. static {
  5. System.loadLibrary("GetPlayTime");
  6. }

  7. public native String getMediaTime(String arg);


  8. }
  9. public class GetTotalTime
  10. {
  11. public static void main(String[] args) {


  12. File dir=new File("F:\\黑马");
  13. FirstCatalog(dir);
  14. System.out.println("当前目录(不包括子目录)视频时间:"+dir.getAbsolutePath()+"\t时间"+getTime(currenttime));
  15. System.out.println("总时间:"+getTime(totaltime));

  16. }

  17. public static int time = 0;
  18. public static int totaltime = 0;
  19. public static int currenttime = 0;// 此时间为当前所在目录的视频时间(不包括子目录),如果当前目录没视频,则为0

  20. public static void FirstCatalog(File dir) {
  21. File[] files = dir.listFiles();
  22. for (int x = 0; x < files.length; x++) {

  23. if (files[x].isDirectory()) {
  24. System.out.print("目录:" + files[x].getAbsolutePath() + "\t时间:");
  25. Catalog(files[x]);
  26. System.out.print(getTime(time));
  27. System.out.print("\t百分比:");
  28. totaltime += time;
  29. time = 0;


  30. /* double d = totaltime / 354318.00;//这个数字是事先获取到的总时间(单位秒)
  31. DecimalFormat df = new DecimalFormat("##.00%");
  32. System.out.println(df.format(d));*/


  33. } else {
  34. currenttime = getSecond(files[x]);

  35. totaltime += currenttime;
  36. }
  37. }

  38. }

  39. public static void Catalog(File dir) {
  40. File[] files = dir.listFiles();
  41. for (int x = 0; x < files.length; x++) {
  42. if (files[x].isDirectory()) {
  43. Catalog(files[x]);
  44. } else
  45. time += getSecond(files[x]);
  46. }
  47. }
  48. public static int getSecond(File file) {
  49. CtrlFtpFile hw = new CtrlFtpFile();
  50. int time = Integer.parseInt(hw.getMediaTime(file.toString()));
  51. return time;
  52. }
  53. public static String getTime(int t) {
  54. Integer minute = t / 60;
  55. Integer second = t % 60;
  56. Integer hour = minute / 60;
  57. minute = minute % 60;
  58. String FormatTime = hour.toString() + "小时" + minute.toString() + "分"
  59. + second.toString() + "秒";
  60. return FormatTime;
  61. }}
复制代码
File dir=new File("F:\\黑马");此目录指向视频的总目录,由于黑马视频一般是一天的课放在一个目录,用第一轮(public static void FirstCatalog(File dir)), 去遍历"F:\\黑马"目录里的所有文件夹,然后再传入所有文件夹名字进去{Catalog(File dir)}进行递归调用。其实应该可以写成一个函数,但对递归不是很熟悉。没想出来。明白的来探讨一下哦。
     说下注意的东西
必须在这个包中写这个程序 package com.avedia.transfers.struts.action; 这是由DLL文件决定的。 CtrlFtpFile这个类名不能改。
附件的DLL文件要放在c:\windows\system32下,DLL附件到这下载 http://download.csdn.net/detail/oymnoymn/4284234,破博客还不让传附件
看下DLL里面的东西
我的博客    http://blog.csdn.net/oymnoymn/article/details/7544502





作者: 黑马-王建雨    时间: 2012-5-8 13:33
表示关注
作者: 杨锦    时间: 2012-5-8 14:56
顶一个!!屌!!
作者: 曾_强    时间: 2012-5-8 15:17
想法很不错。赞叹不已……佩服{:soso_e183:}
作者: 荣天    时间: 2012-5-8 23:53
{:soso_e100:}
作者: suiabing    时间: 2012-5-9 00:26
嗯不错 给力啊
作者: 飞舞❤心动    时间: 2012-5-9 00:38
表示还有一些不懂的地方,不知道能不能解答一下,关于目录:F:\java提高\18-19        时间:Exception in thread "main" java.lang.UnsatisfiedLinkError: no GetPlayTime in java.library.path
        at java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.lang.Runtime.loadLibrary0(Unknown Source)
        at java.lang.System.loadLibrary(Unknown Source)
        at CtrlFtpFile.<clinit>(Text17.java:8)
        at Text17.getSecond(Text17.java:68)
        at Text17.Catalog(Text17.java:63)
        at Text17.Catalog(Text17.java:61)
        at Text17.FirstCatalog(Text17.java:36)
        at Text17.main(Text17.java:19)

作者: 程序猿    时间: 2012-5-9 01:06
飞舞❤心动 发表于 2012-5-9 00:38
表示还有一些不懂的地方,不知道能不能解答一下,关于目录:F:\java提高\18-19        时间:Exception in thread " ...

看博客的注意事项了么? 有个dll文件需要放在c盘的。
如果没看,就按那个注意事项操作一下。应该就可以了

作者: 黄秋    时间: 2012-5-9 02:18
欧阳梦南 发表于 2012-5-9 01:06
看博客的注意事项了么? 有个dll文件需要放在c盘的。
如果没看,就按那个注意事项操作一下。应该就可以了 ...

程序虽好,但还是说两句。怎么不把博客的注意事项,复制过来呢,而非要人去那边再看看。那边是技术论坛,这边也是,这样有炒作自己博客之嫌。
作者: 程序猿    时间: 2012-5-9 02:32
黄秋 发表于 2012-5-9 02:18
程序虽好,但还是说两句。怎么不把博客的注意事项,复制过来呢,而非要人去那边再看看。那边是技术论坛, ...

嗯嗯,你说的也是哦,已添加进来了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2