打包含图片的程序怎样设置路径

发布时间:

你将所有的资源打包为and.jar,你的类GUITest.java位于一个包中:packageanducpp;的图片资源全部放在
images文件夹中,而images文件夹也位于andycp包内。andy.jar$A--
andycpp$B--
GUITest.java$C1images$C2--
Snap1.jpg.
URLimgurl=GUITest.class.getResource("images/Snap1.jpg";ImageIconimg1=newImageIcon(imgURL;
另一种情况,类很多,并且包结构复杂,应该把图片放到最外层,让所有类通过绝对路径来访问该图片:
URLimgurl=GUITest.class.getResource("images/Snap1.jpg";ImageIconimg1=newImageIcon(imgURL;andy.jar$A--
andycpp$B1--
GUITest.javaimages$B2--
Snap1.jpg.
URLimgurl=GUITest.class.getResource("/images/Snap1.jpg";ImageIconimg1=newImageIcon(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
二、使用相对路径获得资源的绝对路径


以上12方法用的是Class.getResource(Stringname方法,34方法用的是ClassLoader.getResource(Stringname5ClassLoader.getSystemResource(Stringname方法
API中解释:
1publicURLClass.getResource(Stringname方法委托给此对象的类加载器。如果此对象通过引导类加载器加载,则此方法将委托给ClassLoader.getSystemResource(Stringname方法在委托前,使用下面的算法从给定的资源名构造一个绝对资源名:*如果name'/'('\u002f'开始,则绝对资源名是'/'后面的name的一部分。
*否则,绝对名具有以下形式:modified_package_name/name
modified_package_name'/''.'('\u002e'
2publicURLClassLoader.getResource(Stringname查找具有给定名称的资源。资源是可以通过类代码以与代码基无关的方式访问的一些数据(图像、声音、文本等)
资源名称是以'/'分隔的标识资源的路径名称。
3publicstaticURLClassLoader.getSystemResource(Stringname从用来加载类的搜索路径中查找具有指定名称的资源。此方法通过系统类加载器(参getSystemClassLoader()来查找资源。
以上三个方法参数name就是提供输入资源的相对路径,这样即可得到当前classpath下的资源
注意点:
1、尽量不要使用相对于System.getProperty("user.dir"当前用户目录的相对路径。2、尽量使用URI形式的绝对路径资源,它可以很容易的转变为URIURLFile对象。3、尽量使用相对classpath的相对路径,不要使用绝对路径。
4使使ClassLoadergetResource(""方法得到当前classpath的绝对路径。
在我们平时使用计算机时要找到需要的文件就必须知道文件的位置,而表示文件的位置的方式就是路径,例如只要看到这个路径:c:/website/img/photo.jpg我们就知道photo.jpg文件是在c盘的website目录下的img子目录中。类似于这样完整的描述文件位置的路径就是绝对路径。我们不需要知道其他任何信息就可以根据绝对路径判断出文件的位置。而在网.net/img/photo.jpg>http://www.e3i5.net/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:xyzest.txt代表了test.txt文件的绝对路径。http://www.sun.com/index.htm也代表了一个URL绝对路径。
相对路径:相对与某个基准目录的路径。包含Web的相对路径(HTML中的相对目录),例如:
Servlet中,"/"代表Web应用的跟目录。和物理路径的相对表示。例如:"./"代表当前目,"../"代表上级目录。这种类似的表示,也是属于相对路径。另外关于URIURL,URN等内容,请参考RFC相关文档标准。
RFC2396:UniformResourceIdentifiers(URI:GenericSyntax,(http://www.ietf.org/rfc/rfc2396.txt
2.关于JSP/Servlet中的相对路径和绝对路径。
2.1服务器端的地址
服务器端的相对地址指的是相对于你的web应用的地址,这个地址是在服务器端解析的(不同于htmljavascript中的相对地址,他们是由客户端浏览器解析的)也就是说这时候在jspservletwebhttp://192.168.0.1/webapp/的。
其用到的地方有:forwardservlet中的request.getRequestDispatcher(address;这个address是在服务器forwarda.jsprequest.getRequestDispatcher(/user/a.jsp这个/相对于当前的web应用webapp其绝对地址就是:http://192.168.0.1/webapp/user/a.jspsendRedirect:在jsp<%response.sendRedirect("/rtccp/user/a.jsp";%>
2.22、客户端的地址
所有的html页面中的相对地址都是相对于服务器根目录(http://192.168.0.1/的,而不是(跟目录下的该Web应用的目录http://192.168.0.1/webapp/的。Html中的form表单的action属性的地址应该是相对于服务器根目录(http://192.168.0.1/的,所以,如果提交a.jsp为:action"/webapp/user/a.jsp"action="<%=request.getContextPath(%

>"/user/a.jsp
提交到servletactiom"/webapp/handleservlet"Javascript也是在客户端解析的,以其相对路径和form表单一样。
因此,一般情况下,JSP/HTML页面等引用的CSS,Javascript.Action等属性前面最好都加
<%=request.getContextPath(%>,以确保所引用的文件都属于Web应用中的目录。另外,应该尽量避免使用类似".","./","../../"等类似的相对该文件位置的相对路径,这样当文件移动时,很容易出问题。
3.JSP/Servlet中获得当前应用的相对路径和绝对路径
3.1JSP中获得当前应用的相对路径和绝对路径
根目录所对应的绝对路径:request.getRequestURI(
文件的绝对路径:application.getRealPath(request.getRequestURI(;当前web应用的绝对路径:application.getRealPath("/";:newFile(application.getRealPath(request.getRequestURI(.getParent(
3.2Servlet中获得当前应用的相对路径和绝对路径根目录所对应的绝对路径: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.javaClass中获得相对路径,绝对路径的方法
4.1单独的Java类中获得绝对路径根据java.io.FileDoc文挡,可知:
默认情况下newFile("/"代表的目录为:System.getProperty("user.dir"一下程序获得执行类的当前路径
packageorg.cheng.file;
importjava.io.File;
publicclassFileTest{

publicstaticvoidmain(String[]argsthrowsException{
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(newFile("/".getAbsolutePath(;System.out.println(System.getProperty("user.dir";}}
4.2服务器中的Java类获得当前路径(来自网络)
(1.Weblogic
WebApplication的系统文件根目录是你的weblogic安装所在根目录。例如:如果你的weblogic安装在c:_eaweblogic700.....那么,你的文件根路径就是c:.
所以,有两种方式能够让你访问你的服务器端的文件:a.使用绝对路径:
比如将你的参数文件放在c:yourconfigyourconf.properties
直接使用newFileInputStream("yourconfig/yourconf.properties";b.使用相对路径:
相对路径的根目录就是你的webapplication的根路径,WEB-INF的上一级目录,将你的参数文件放
yourwebappyourconfigyourconf.properties这样使用:
newFileInputStream("./yourconfig/yourconf.properties";这两种方式均可,自己选择。
(2.Tomcat
在类中输出System.getProperty("user.dir";显示的是%Tomcat_Home%/bin
(3.Resin
不是你的JSP放的相对路径,JSP引擎执行这个JSP编译成SERVLET

打包含图片的程序怎样设置路径

相关推荐