landix 发表于 2013-1-27 05:06:44

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包,皆不再受文件路径困扰。
 
 
页: [1]
查看完整版本: java中调用图片音频等文件的相对路径问题