`
landix
  • 浏览: 5334 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

java中调用图片音频等文件的相对路径问题

阅读更多

最近在用java开发个IM,在调用图片和音频时,设置相对路径总是存在问题。eclipse下设好了,打jar包时又发生问题。

经过一番摸索找到了一个解决办法:

 

利用

URL java.lang.ClassLoader.getResource(String arg0)

通过类加载器加载文件资源

封装了一个资源类,需要取得图片或音频等文件时只需调用该类的相应方法即可

 

import javax.swing.ImageIcon;
import java.awt.Image;
import java.awt.Toolkit;
import java.io.File;
import java.applet.Applet;
import java.applet.AudioClip;

/**
*
* <p>Title: 获取资源</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2008</p>
* <p>Company: </p>
* @author landix
* @version 1.0
*/
public class ResourceManager {
    //系统图片路径
    private static String IMAGE_RESOURCE_PATH = "com/landix/oamq/client/images/";
    //系统音频路径
    private static String SOUND_RESOURCE_PATH = "com/landix/oamq/client/sound/";
    //系统文件路径
    private static String FILE_RESOURCE_PATH = "";
    
    private ResourceManager() {
    }
    
    public static ImageIcon getIcon(String imageName) {
       if (imageName == null) return(null);
       ImageIcon icon = null;
       try {
                //通过类加载器加载图片资源,作为图标对象的参数
           icon = new ImageIcon(ResourceManager.class.getClassLoader()
                                                 .getResource(IMAGE_RESOURCE_PATH + imageName));
       } catch (Exception ex) {
          System.out.println ("### Exception in getIcon() : \r\n" + IMAGE_RESOURCE_PATH + imageName + " " + ex.toString());
       }

       return icon;
    }
    
    public static Image getImage(String imageName) {
        if (imageName == null) return(null);
        Image image = null;
        try {
                   //通过类加载器加载图片资源,作为图标对象的参数
        	   image = Toolkit.getDefaultToolkit().getImage(ResourceManager.class.getClassLoader()
                        .getResource(IMAGE_RESOURCE_PATH + imageName));
        } catch (Exception ex) {
           System.out.println ("### Exception in getIcon() : \r\n" + IMAGE_RESOURCE_PATH + imageName + " " + ex.toString());
        }

        return image;
     }
    
    public static AudioClip getSound(String soundName) {
        if (soundName == null) return(null);
        AudioClip wowo = null ;
        try {
          	  //通过类加载器加载声音资源,作为声音对象的参数
        	   wowo = Applet.newAudioClip(ResourceManager.class.getClassLoader()
                       .getResource(SOUND_RESOURCE_PATH + soundName));
        } catch ( Exception ex ) {
           System.out.println ("### Exception in getIcon() : \r\n" + SOUND_RESOURCE_PATH + soundName + " " + ex.toString());
        }

        return wowo;
     }
    
    public static File getFile(String fileName) {
        if (fileName == null) return(null);
        File file = null;
        try {
	 //通过类加载器加载文件资源,作为文件对象的参数
        	   file = new File(ResourceManager.class.getClassLoader()
                                                  .getResource(FILE_RESOURCE_PATH + fileName).toString());
        } catch (Exception ex) {
           System.out.println ("### Exception in getIcon() : \r\n" + FILE_RESOURCE_PATH + fileName + " " + ex.toString());
        }

        return file;
     }

}

 

 经过实践,无论是eclipse下调试还是打成jar包,皆不再受文件路径困扰。

 

 

分享到:
评论

相关推荐

    Java播放本地声音,实现系统报警

    Java播放本地声音,我实现的是系统报警,把声音文件放在了D盘,只要改一下代码中的路径就好了,播放本地机器的声音都可以,但必须是wav格式的哦

    JAVA_API1.6文档(中文)

    javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/O。 javax.management 提供 Java Management Extensions 的核心类。 javax.management.loading 提供实现高级动态加载的类...

    java api最新7.0

    javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/O。 javax.management 提供 Java Management Extensions 的核心类。 javax.management.loading 提供实现高级动态加载的类。...

    毕业设计:基于DES加密的即时通信聊天系统(java实现)

    ddd.java: 调用音频线程 des.java: des加密算法,进行消息的加密解密 res.java: 负责处理添加好友权限请求 服务器代码 server.java: 服务器主程序,负责载入界面 serverThread.java: 服务器辅助线程,避免卡死主线程...

    Java 1.6 API 中文 New

    javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/O。 javax.management 提供 Java Management Extensions 的核心类。 javax.management.loading 提供实现高级动态加载的类。...

    JavaAPI1.6中文chm文档 part1

    javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/O。 javax.management 提供 Java Management Extensions 的核心类。 javax.management.loading 提供实现高级动态加载的类...

    本科毕业设计:基于DES加密的即时通信聊天系统

    ddd.java: 调用音频线程 des.java: des加密算法,进行消息的加密解密 res.java: 负责处理添加好友权限请求 服务器代码 server.java: 服务器主程序,负责载入界面 serverThread.java: 服务器辅助线程,避免卡死主线程...

    JavaAPI中文chm文档 part2

    javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/O。 javax.management 提供 Java Management Extensions 的核心类。 javax.management.loading 提供实现高级动态加载的类...

    java使用ffmpeg的jar包

    导入这个jar包后就可以使用ffmpeg的音频转码 mvn install:install-file -Dfile=E:\jave-1.0.2.jar //包的输入路径 -DgroupId=jave -DartifactId=jave -Dversion=1.0.2 -Dpackaging=jar //执行完成后 ...

    [Java参考文档]

    javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/O。 javax.management 提供 Java Management Extensions 的核心类。 javax.management.loading 提供实现高级动态加载的类...

    abnerick-ivr:星号-java + JUnit集成+ Mockito

    ubuntu 包含我们的PBX服务器的 Virtual Box VM ubuntu:/ media / files是方尖碑的安装点:/到/ files的路径音频文件位于/ var / lib / asterisk / sounds / custom中,使用符号链接自定义-&gt; / media / files ...

    [Java参考文档].JDK_API 1.6

    javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/O。 javax.management 提供 Java Management Extensions 的核心类。 javax.management.loading 提供实现高级动态加载的类。...

    网管教程 从入门到精通软件篇.txt

    Axx:ARJ压缩文件的分包序号文件,用于将一个大文件压至几个小的压缩包中(xx取01-99的数字) A3L:Authorware 3.x库文件 A4L:Authorware 4.x库文件 A5L:Authorware 5.x库文件 A3M,A4M:Authorware Macintosh...

    Android开发应用实战详解源代码

    4.20 加载手机存储卡中的文件 4.21 小结 第5章 交互式服务 5.1 textview的花样 5.2 拨打电话程序 5.3 短信发送程序 5.4 e-mail发送程序 5.5 实现手机震动效果 5.6 图文提醒效果 5.7 状态栏提醒 5.8 检索通讯录 5.8.1...

    新版Android开发教程.rar

    谷歌早在 2002 年就进入了移动领域,可是由于目前的手机操作系统企业和手机企业相对封闭,提高了 行业的进入门槛,移动互联网的发展远没有拥有统一标准的传统互联网发展迅速,此次推出的开源手机操 作 系统平台就是...

    JDK_1_6 API

    javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/O。 javax.management 提供 Java Management Extensions 的核心类。 javax.management.loading 提供实现高级动态加载的类...

Global site tag (gtag.js) - Google Analytics