java获取⽂件的路径怎么写_Java中各种获取⽂件路径的⽅法⽤JAVA获取⽂件,听似简单,但对于很多像我这样的新⼈来说,还是掌握颇浅,⽤起来感觉颇深,⼤常最经常⽤的,就是⽤JAVA的File 类,如要取得c:/⽂件,就会这样⽤File file = newFile("c:/");这样⽤有什么问题,相信⼤家都知道,就是路径硬编码,对于JAVA精神来说,应⽤应该⼀次成型,到处可⽤,并且从现实应⽤来讲,最终⽣成的应⽤也会部署到Windows外的操作系统中,对于linux 来说,在应⽤中⽤了c:/这样的字样,就是失败,所以,我们应该尽量避免使⽤硬编码,即直接使⽤绝对路径。
在Servlet应⽤中,有⼀个getRealPath(String str)的⽅法,这个⽅法尽管也可以动态地获得⽂件的路径,不秘直接⼿写绝对路径,但这也是⼀个不被建议使⽤的⽅法,那么,我们有什么⽅法可以更好地获得⽂件呢?
那就是Resource()与ResourceAsStream()⽅法,但很多⼈还是不太懂它的⽤法,因为很多⼈(⽐如不久前的我)都不知道应该传怎么样的参数给它,当然,有些⼈⼰经⽤得如⽕纯青,这些⼈是不需要照顾的,在此仅给不会或者还不是很熟的⼈解释⼀点点。
⽐如我们有以下⽬录
|--project
|--src
|--javaapplication
|--Test.java
|--
|--
|--build
|--javaapplication
|--Test.class
|--
|--
在上⾯的⽬录中,有⼀个src⽬录,这是JAVA源⽂件的⽬录,有⼀个build⽬录,这是JAVA编译后⽂件(.class⽂件等)的存放⽬录
那么,我们在Test类中应该如何分别获得
< 这四个⽂件呢?
⾸先讲与
<:
⽅法⼀:File file3 = new File(Resource("").getFile());
java怎么编写⽅法⼆:File file3 = new File(Resource("/").getFile());
⽅法三:File file3 = new File(ClassLoader().getResource("").getFile());
<:
⽅法⼀:File file4 = new File(Resource("/").getFile());
⽅法⼆:File file4 = new File(ClassLoader().getResource("").getFile());
很好,我们可以有多种⽅法选择,但是file1与file2⽂件呢?如何获得?
答案是,你只能写上它们的绝对路径,不能像file3与file4⼀样⽤Resource()这种⽅法获得,它们的获取⽅法如下
假如整个project⽬录放在c:/下,那么file1与file2的获取⽅法分别为
<
⽅法⼀:File file1 = new File("c:/project/src/");
⽅法⼆:。。。没有
<
⽅法⼀:File file2 = new File("c:/project/");
⽅法⼆:。。。也没有
总结⼀下,就是你想获得⽂件,你得从最终⽣成的.class⽂件为着⼿点,不要以.java⽂件的路径为出发点,因为真正使⽤的就是.class,不会拿个.java⽂件就使⽤,因为java是编译型语⾔嘛
⾄于getResouce()⽅法的参数,你以class为出发点,再结合相对路径的概念,就可以准确地定位资源
⽂件了,⾄于它的根⽬录嘛,你⽤不同的IDEbuild出来是不同的位置下的,不过都是以顶层package作为根⽬录,⽐如在Web应⽤中,有⼀个WEB-INF的⽬录,WEB-INF⽬录⾥⾯除了l⽂件外,还有⼀个classes⽬录,没错了,它就是你这个WEB应⽤的package的顶层⽬录,也是所有.class的根⽬
录“/”,假如clasaes⽬录下⾯有⼀个⽂件,它的相对路径就是"/",如果相对路径不是以"/"开头,那么它就是相对于.class 的路径。。
还有⼀个getResourceAsStream()⽅法,参数是与getResouce()⽅法是⼀样的,它相当于你⽤getResource()取得File⽂件后,再
new InputStream(file)⼀样的结果
> file:/home/duanyong/workspace/cxxx/xxxx/bin/WEB-INF/classes/
getResource(String path),path是以class⽂件的顶级⽬标所在的相对路径。如果顶级⽬录为classes,在classes/这样⼀个⽂件。取得的语法为:Resource("/");
⽰例代码:
查看复制到剪切板打印
//取得classes顶级⽬录下的/⽂件
System.out.println(Resource("/"));
//取得本class的上路径
System.out.println(Resource(SimpleName() + ".class"));
Java代码
//取得classes顶级⽬录下的/⽂件
System.out.println(Resource("/"));
//取得本class的上路径
System.out.println(Resource(SimpleName() + ".class"));
结果:
file:/home/duanyong/workspace/test/bin/WEB-INF/classes/
file:/home/duanyong/workspace/test/bin/WEB-INF/classes/cn/duanyong/test/Test.class
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论