打包含图片的程序怎样设置路径.doc_第1页
打包含图片的程序怎样设置路径.doc_第2页
打包含图片的程序怎样设置路径.doc_第3页
打包含图片的程序怎样设置路径.doc_第4页
打包含图片的程序怎样设置路径.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

你将所有的资源打包为and.jar,你的类GUITest.java位于一个包中:package anducpp;你的图片资源全部放在images文件夹中,而images文件夹也位于andycp包内。andy.jar$A- andycpp$B- GUITest.java$C1 images$C2- Snap1.jpg. URL imgurl=GUITest.class.getResource(images/Snap1.jpg); ImageIcon img1=new ImageIcon(imgURL);另一种情况,类很多,并且包结构复杂,应该把图片放到最外层,让所有类通过绝对路径来访问该图片:URL imgurl=GUITest.class.getResource(images/Snap1.jpg); ImageIcon img1=new ImageIcon(imgURL);andy.jar$A- andycpp$B1- GUITest.java images$B2- Snap1.jpg. URL imgurl=GUITest.class.getResource(/images/Snap1.jpg); ImageIcon img1=new ImageIcon(imgURL);$1.由于jar对大小写的敏感性,因此应注意图片名称的大小写。 2.images前面加“/”这个反斜杠表示根目录,没有“/”就表示相对路径,一、得到classpath和当前类的绝对路径的一些方法1.FileTest.class.getResource() 得到的是当前类FileTest.class文件的URI目录, 不包括自己。 如:file:/D:/workspace/FileDemo/bin/com/test/2.FileTest.class.getResource(/) 得到的是当前的classpath的绝对URI路径。 如:file:/D:/workspace/FileDemo/bin/3.Thread.currentThread().getContextClassLoader().getResource() 得到的也是当前ClassPath的绝对URI路径。 如:file:/D:/workspace/FileDemo/bin/4.FileTest.class.getClassLoader().getResource() 得到的也是当前ClassPath的绝对URI路径。 如:file:/D:/workspace/FileDemo/bin/5.ClassLoader.getSystemResource() 得到的也是当前ClassPath的绝对URI路径。 如:file:/D:/workspace/FileDemo/bin/ 推荐使用 Thread.currentThread().getContextClassLoader().getResource() 来得到当前的 classpath 的绝对路径的URI二、使用相对路径获得资源的绝对路径 以上1,2方法用的是 Class.getResource(String name) 方法, 3,4方法用的是 ClassLoader.getResource(String name) 方法, 5方法用的是 ClassLoader.getSystemResource(String name) 方法API 中解释: 1、public URL Class.getResource(String name) 方法委托给此对象的类加载器。如果此对象通过引导类加载器加载,则此方法将委托给 ClassLoader.getSystemResource(String name) 方法在委托前,使用下面的算法从给定的资源名构造一个绝对资源名: * 如果 name 以 / (u002f) 开始,则绝对资源名是 / 后面的 name 的一部分。 * 否则,绝对名具有以下形式:modified_package_name/name 其中 modified_package_name 是此对象的包名,该名用 / 取代了 . (u002e)。 2、public URL ClassLoader.getResource(String name) 查找具有给定名称的资源。 资源是可以通过类代码以与代码基无关的方式访问的一些数据(图像、声音、文本等)。 资源名称是以 / 分隔的标识资源的路径名称。 3、public static URL ClassLoader.getSystemResource(String name) 从用来加载类的搜索路径中查找具有指定名称的资源。此方法通过系统类加载器(参见 getSystemClassLoader())来查找资源。 以上三个方法参数 name 就是提供输入资源的相对路径,这样即可得到当前 classpath 下的资源注意点: 1、尽量不要使用相对于System.getProperty(user.dir) 当前用户目录的相对路径。 2、尽量使用 URI 形式的绝对路径资源,它可以很容易的转变为URI,URL,File对象。 3、尽量使用相对 classpath 的相对路径,不要使用绝对路径。 4、绝对不要使用硬编码的绝对路径。因为完全可以使用 ClassLoader 类的 getResource() 方法得到当前 classpath 的绝对路径。在我们平时使用计算机时要找到需要的文件就必须知道文件的位置,而表示文件的位置的方式就是路径,例如只要看到这个路径:c:/website/img/photo.jpg我们就知道photo.jpg文件是在c盘的website目录下的img子目录中。类似于这样完整的描述文件位置的路径就是绝对路径。我们不需要知道其他任何信息就可以根据绝对路径判断出文件的位置。而在网站中类似以.net/img/photo.jpg来确定文件位置的方式也是绝对路径。/img/photo.jpg来确定文件位置的方式也是绝对路径。在网站的应用中,通常我们使用/来表示根目录,/img/photo.jpg就表示photo.jpg文件在这个网站的根目录上的img目录里。但是这样使用对于初学者来说是具有风险性的,因为要知道这里所指的根目录并不是你的网站的根目录,而是你的网站所在的服务器的根目录,因此当网站的根目录与服务器根目录不同时,就会发生错误。 相对路径:分析一下为什么会发生图片不能正常显示的情况。举一个例子,现在有一个页面index.htm,在这个页面中联接有一张图片photo.jpg。他们的绝对路径如下:c:/website/index.htmc:/website/img/photo.jpg如果你使用绝对路径c:/website/img/photo.jpg,那么在自己的计算机上将一切正常,因为确实可以在指定的位置即c:/website/img/photo.jpg上找到photo.jpg文件,但是当你将页面上传到网站的时候就很可能会出错了,因为你的网站可能在服务器的c盘,可能在d盘,也可能在aa目录下,更可能在bb目录下,总之没有理由会有c:/website/img/photo.jpg这样一个路径。那么,在index.htm文件中要使用什么样的路径来定位photo.jpg文件呢?对,应该是用相对路径,所谓相对路径,顾名思义就是自己相对与目标位置。在上例中index.htm中联接的photo.jpg可以使用img/photo.jpg来定位文件,那么不论将这些文件放到哪里,只要他们的相对关系没有变,就不会出错。另外我们使用“./”来表示上一级目录,“././”表示上上级的目录,以此类推。(学习过dos的朋友可能更容易理解)再看几个例子,注意所有例子中都是index.htm文件中联接有一张图片photo.jpg。例:c:/website/web/index.htmc:/website/img/photo.jpg在此例中index.htm中联接的photo.jpg应该怎样表示呢?错误写法:img/photo.jpg这种写法是不正确的,在此例中,对于index.htm文件来说img/photo.jpg所代表的绝对路径是:c:/website/web/img/photo.jpg,显然不符合要求。正确写法:使用./img/photo.jpg的相对路径来定位文件例:c:/website/web/xz/index.htmc:/website/img/images/photo.jpg在此例中index.htm中联接的photo.jpg应该怎样表示呢?错误写法:./img/images/photo.jpg这种写法是不正确的,在此例中对于index.htm文件来说./img/images/photo.jpg所代表的绝对路径是:c:/website/web/img/images/photo.jpg。 正确写法:可以使用././img/images/photo.jpg的相对路径来定位文件例:c:/website/web/xz/index.htmc:/website/web/img/photo.jpg在此例中index.htm中联接的photo.jpg应该怎样表示呢?错误写法:././img/photo.jpg这种写法是不正确的,在此例中对于index.htm文件来说././img/photo.jpg所代表的绝对路径是:c:/website/img/photo.jpg。正确写法:可以使用./img/photo.jpg的相对路径来定位文件总结:通过以上的例子可以发现,在把绝对路径转化为相对路径的时候,两个文件绝对路径中相同的部分都可以忽略,不做考虑。只要考虑他们不同之处就可以了。绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:C:xyz est.txt 代表了test.txt文件的绝对路径。/index.htm也代表了一个URL绝对路径。相对路径:相对与某个基准目录的路径。包含Web的相对路径(HTML中的相对目录),例如:在Servlet中,/代表Web应用的跟目录。和物理路径的相对表示。例如:./ 代表当前目录,./代表上级目录。这种类似的表示,也是属于相对路径。另外关于URI,URL,URN等内容,请参考RFC相关文档标准。RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax,(/rfc/rfc2396.txt)2.关于JSP/Servlet中的相对路径和绝对路径。2.1服务器端的地址服务器端的相对地址指的是相对于你的web应用的地址,这个地址是在服务器端解析的(不同于html和javascript中的相对地址,他们是由客户端浏览器解析的)也就是说这时候在jsp和servlet中的相对地址应该是相对于你的web应用,即相对于http: //webapp/的。其用到的地方有:forward:servlet中的request.getRequestDispatcher(address);这个address是在服务器端解析的,所以,你要forward到a.jsp应该这么写:request.getRequestDispatcher(“/user/a.jsp”)这个/ 相对于当前的web应用webapp,其绝对地址就是:/webapp/user/a.jsp。 sendRedirect:在jsp中2.22、客户端的地址所有的html页面中的相对地址都是相对于服务器根目录(/)的,而不是(跟目录下的该Web应用的目录) /webapp/的。 Html中的form表单的action属性的地址应该是相对于服务器根目录(/)的,所以,如果提交到a.jsp 为:action/webapp/user/a.jsp或action=/user/a.jsp;提交到servlet为actiom/webapp/handleservlet Javascript也是在客户端解析的,所以其相对路径和form表单一样。因此,一般情况下,在JSP/HTML页面等引用的CSS,Javascript.Action等属性前面最好都加上,以确保所引用的文件都属于Web应用中的目录。另外,应该尽量避免使用类似.,./,././等类似的相对该文件位置的相对路径,这样当文件移动时,很容易出问题。3. JSP/Servlet中获得当前应用的相对路径和绝对路径3.1 JSP中获得当前应用的相对路径和绝对路径根目录所对应的绝对路径:request.getRequestURI()文件的绝对路径 :application.getRealPath(request.getRequestURI();当前web应用的绝对路径 :application.getRealPath(/);取得请求文件的上层目录:new File(application.getRealPath(request.getRequestURI().getParent()3.2 Servlet中获得当前应用的相对路径和绝对路径根目录所对应的绝对路径:request.getServletPath();文件的绝对路径 :request.getSession().getServletContext().getRealPath(request.getRequestURI()当前web应用的绝对路径 :servletConfig.getServletContext().getRealPath(/);(ServletContext对象获得几种方式:javax.servlet.http.HttpSession.getServletContext()javax.servlet.jsp.PageContext.getServletContext()javax.servlet.ServletConfig.getServletContext()4.java 的Class中获得相对路径,绝对路径的方法4.1单独的Java类中获得绝对路径根据java.io.File的Doc文挡,可知:默认情况下new File(/)代表的目录为:System.getProperty(user.dir)。一下程序获得执行类的当前路径 package org.cheng.file; import java.io.File; public class FileTest public static void main(String args) throws Exception System.out.println(Thread.currentThread().getContextClassLoader().getResource(); System.out.println(FileTest.class.getClassLoader().getResource(); System.out.println(ClassLoader.getSystemResource(); System.out.println(FileTest.class.getResource(); System.out.println(FileTest.class.getResource(/); /Class文件所在路径 System.out.println(new File(/).getAbsolutePath(); System.out.println(System.getProperty(user.dir); 4.2服务器中的Java类获得当前路径(来自网络)(1).WeblogicWebApplication的系统文件

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论