JAVA网页设计猎取类的class文件的相对路径
在1995年5月23日以“Java”的名称正式发布了。在java中,常常要定位某些文件的地位,为了能让程序与物理地位有关,就要利用绝对路径。但java中利用绝对路径总会碰到一些很贫苦的成绩,就是究竟相对哪一个参照物的成绩。由于我们平常利用绝对路径老是绝对以后事情目次而言的,但偶然需求并不是云云。好比,要在一个开辟包中利用绝对路径,却不晓得开辟包被其他程序挪用时的地点路径,并且出格是在web使用中,很难断定某个文件在全部使用中的绝对路径。
以是利用绝对路径最好的举措就是让路径绝对的参照物是我的开辟包或我的使用自己的工具,最好的就是用我开辟包中的类的class文件。只需晓得了某个class文件的相对路径,就能够以它为参照物,利用绝对路径来定位其他任何文件了。
为了完成这个设法,我写了这个Path类,这个类供应了两个静态大众办法,一个用来定位类的class文件的地位,另外一个以某个类为参照物来定位一个绝对路径。利用这两个办法,我们能够完整不用剖析使用确当前事情路径,为所欲为的依据本人的地位来寻觅任何文件。好比在编写某个功效性开辟包时,就能够完整不必管挪用这个开辟包的使用的路径情形,而仅仅依据开辟包自己的地位来定位文件,如许很好的完成了封装性,将文件的路径处置完整关闭在了开辟包本身以内。
以下是Path类的源代码:
*创立日期2004-11-22**变动所天生文件模板为*窗口>首选项>Java>代码天生>代码和正文*/packagemytools;
importjava.io.File;importjava.io.IOException;importjava.net.MalformedURLException;importjava.net.URL;importjava.security.CodeSource;importjava.security.ProtectionDomain;
/***@author由月**这个类供应了一些依据类的class文件地位来定位的办法。*/publicclassPath{/***猎取一个类的class文件地点的相对路径。这个类能够是JDK本身的类,也能够是用户自界说的类,大概是第三方开辟包里的类。*只需是在本程序中能够被加载的类,都能够定位到它的class文件的相对路径。**@paramcls*一个对象的Class属性*@return这个类的class文件地位的相对路径。假如没有这个类的界说,则前往null。*/publicstaticStringgetPathFromClass(Classcls)throwsIOException{Stringpath=null;if(cls==null){thrownewNullPointerException();}URLurl=getClassLocationURL(cls);if(url!=null){path=url.getPath();if("jar".equalsIgnoreCase(url.getProtocol())){try{path=newURL(path).getPath();}catch(MalformedURLExceptione){}intlocation=path.indexOf("!/");if(location!=-1){path=path.substring(0,location);}}Filefile=newFile(path);path=file.getCanonicalPath();}returnpath;}
/***这个办法能够经由过程与某个类的class文件的绝对路径来猎取文件或目次的相对路径。一般在程序中很难定位某个绝对路径,出格是在B/S使用中。*经由过程这个办法,我们能够依据我们程序本身的类文件的地位来定位某个绝对路径。*好比:某个txt文件相对程序的Test类文件的路径是../../resource/test.txt,*那末利用本办法Path.getFullPathRelateClass("../../resource/test.txt",Test.class)*失掉的了局是txt文件的在体系中的相对路径。**@paramrelatedPath*绝对路径*@paramcls*用来定位的类*@return绝对路径所对应的相对路径*@throwsIOException*由于本办法将查询文件体系,以是大概抛出IO非常*/publicstaticStringgetFullPathRelateClass(StringrelatedPath,Classcls)throwsIOException{Stringpath=null;if(relatedPath==null){thrownewNullPointerException();}StringclsPath=getPathFromClass(cls);FileclsFile=newFile(clsPath);StringtempPath=clsFile.getParent()+File.separator+relatedPath;Filefile=newFile(tempPath);path=file.getCanonicalPath();returnpath;}
/***猎取类的class文件地位的URL。这个办法是本类最基本的办法,供别的办法挪用。*/privatestaticURLgetClassLocationURL(finalClasscls){if(cls==null)thrownewIllegalArgumentException("nullinput:cls");URLresult=null;finalStringclsAsResource=cls.getName().replace(.,/).concat(".class");finalProtectionDomainpd=cls.getProtectionDomain();//java.lang.Classcontractdoesnotspecify//ifpdcaneverbenull;//itisnotthecaseforSunsimplementations,//butguardagainstnull//justincase:if(pd!=null){finalCodeSourcecs=pd.getCodeSource();//cscanbenulldependingon//theclassloaderbehavior:if(cs!=null)result=cs.getLocation();
if(result!=null){//Convertacodesourcelocationinto//afullclassfilelocation//forsomecommoncases:if("file".equals(result.getProtocol())){try{if(result.toExternalForm().endsWith(".jar")||result.toExternalForm().endsWith(".zip"))result=newURL("jar:".concat(result.toExternalForm()).concat("!/").concat(clsAsResource));elseif(newFile(result.getFile()).isDirectory())result=newURL(result,clsAsResource);}catch(MalformedURLExceptionignore){}}}}
if(result==null){//Trytofindclsdefinitionasaresource;//thisisnot//document.dtobelegal,butSuns//implementationsseemto//allowthis:finalClassLoaderclsLoader=cls.getClassLoader();result=clsLoader!=null?clsLoader.getResource(clsAsResource):ClassLoader.getSystemResource(clsAsResource);}returnresult;}
publicstaticvoidmain(String[]args){try{System.out.println(getPathFromClass(Path.class));System.out.println(getFullPathRelateClass("../test/abc/..",Path.class));}catch(Exceptione){e.printStackTrace();}}}
关于第二点:俺问问你,如果是企业级项目的话,诸如RMI,EJB,等一些关键技术,这些难道都不需要学么?如果光是使用jsp,servlet,javabean的话。 所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 是一种使网页(Web Page)产生生动活泼画面的语言 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。 Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢? 关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。 J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。 如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。 你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
页:
[1]
2