
可以通过“ 类名classgetResource("")getPath()”方法实现。
举例:”String path = XMLSclassgetResource("")getPath()“
解释:以上语句就是获取到XMLS编译后的绝对路径(无法获取到java文件路径的,因为java运行的都是class文件)。
在java中获得文件的路径在我们做上传文件 *** 作时是不可避免的。web上运行1:thisgetClass()getClassLoader()getResource("/")getPath();thisgetClass()getClassLoader()getResource("")getPath();得到的是ClassPath的绝对URI路径。如:/D:/jboss-422GA/server/default/deploy/hpwar/WEB-INF/classes/SystemgetProperty("userdir");thisgetClass()getClassLoader()getResource("")getPath();得到的是项目的绝对路径。如:/D:/jboss-422GA/server/default/deploy/hpwar2:thisgetClass()getResource("/")getPath();thisgetClass()getResource("")getPath();得到的是当前类文件的URI目录。如:/D:/jboss-422GA/server/default/deploy/hpwar/WEB-INF/classes/com/jebel/helper/thisgetClass()getResource("")getPath();X不能运行3:ThreadcurrentThread()getContextClassLoader()getResource("/")getPath()ThreadcurrentThread()getContextClassLoader()getResource("")getPath()得到的是ClassPath的绝对URI路径。如:/D:/jboss-422GA/server/default/deploy/hpwar/WEB-INF/classes/ThreadcurrentThread()getContextClassLoader()getResource("")getPath()得到的是项目的绝对路径。如:/D:/jboss-422GA/server/default/deploy/hpwar在本地运行中1:thisgetClass()getClassLoader()getResource("")getPath();thisgetClass()getClassLoader()getResource("")getPath();得到的是ClassPath的绝对URI路径。如:/D:/myProjects/hp/WebRoot/WEB-INF/classesthisgetClass()getClassLoader()getResource("")getPath();X不能运行2:thisgetClass()getResource("")getPath();thisgetClass()getResource("")getPath();得到的是当前类文件的URI目录。如:/D:/myProjects/hp/WebRoot/WEB-INF/classes/com/jebel/helper//D:/myProjects/hp/WebRoot/WEB-INF/classes/得到的是ClassPath的绝对URI路径。如:/D:/myProjects/hp/WebRoot/WEB-INF/classes3:ThreadcurrentThread()getContextClassLoader()getResource("")getPath()ThreadcurrentThread()getContextClassLoader()getResource("")getPath()得到的是ClassPath的绝对URI路径。。如:/D:/myProjects/hp/WebRoot/WEB-INF/classesThreadcurrentThread()getContextClassLoader()getResource("/")getPath()X不能运行最后在Web应用程序中,我们一般通过ServletContextgetRealPath("/")方法得到Web应用程序的根目录的绝对路径。还有requestgetContextPath();在Weblogic中要用requestgetServletContext()getContextPath();但如果打包成war部署到Weblogic服务器,项目内部并没有文件结构的概念,用这种方式是始终得到null,获取不到路径,目前还没有找到具体的解决方案。
平时写程序的时候,很多时候提示文件找不到,而抛出了异常,现在整理如下
一 相对路径的获得
说明:相对路径(即不写明时候到底相对谁)均可通过以下方式获得(不论是一般的java项目还是web项目)
String relativelyPath=SystemgetProperty("userdir");
上述相对路径中,java项目中的文件是相对于项目的根目录
web项目中的文件路径视不同的web服务器不同而不同(tomcat是相对于 tomcat安装目录\bin)
二 类加载目录的获得(即当运行时某一类时获得其装载目录)
11)通用的方法一(不论是一般的java项目还是web项目,先定位到能看到包路径的第一级目录)
InputStream is=TestActionclassgetClassLoader()getResourceAsStream("testtxt");
(testtxt文件的路径为 项目名\src\testtxt;类TestAction所在包的第一级目录位于src目录下)
上式中将TestAction,testtxt替换成对应成相应的类名和文件名字即可
12)通用方法二 (此方法和11中的方法类似,不同的是此方法必须以'/'开头,
InputStream is=Test1classgetResourceAsStream("/testtxt");
(testtxt文件的路径为 项目名\src\testtxt,类Test1所在包的第一级目录位于src目录下)
三 web项目根目录的获得(发布之后)
1 从servlet出发
可建立一个servlet在其的init方法中写入如下语句
ServletContext s1=thisgetServletContext();
String temp=s1getRealPath("/"); (关键)
结果形如:D:\工具\Tomcat-60\webapps\002_ext\ (002_ext为项目名字)
如果是调用了s1getRealPath("")则输出D:\工具\Tomcat-60\webapps\002_ext(少了一个"\")
2 从>
package compackage2;
import javaioFile;
public class T5 {
public static void main(String[] args) {
T test=new T();
testget();
}
}
class T
{
public void get()
{
File file = new File(thisgetClass()getResource("/")getPath());
Systemoutprintln(filetoString());
}
}
读取配置文件 , xxxproperties放在webroot/WEB-INF/classes/目录下
首先将配置文件转换成InputStream,有两种方式,原理一样,都是通过类加载器得到资源:
(1)InputStream inputStream = ThreadcurrentThread()getContextClassLoader()getResourceAsStream("xxproperties");
(2) InputStream inputStream =
thisgetClass() getClassLoader()getResourceAsStream( "xxproperties" );
调用对象的getClass()方法是获得对象当前的类类型,这部分数据存在方法区中,
而后在类类型上调用 getClassLoader()方法是得到当前类型的类加载器,我们知道在Java中所有的类都是通过加载器加载到虚拟机中的,而且类加载器之间存在父 子关系,就是子知道父,父不知道子,这样不同的子加载的类型之间是无法访问的(虽然它们都被放在方法区中),所以在这里通过当前类的加载器来加载资源也就 是保证是和类类型同一个加载器加载的。
最后调用了类加载器的getResourceAsStream()方法来加载资源。
(3) 然后加载配置文件,读取属性值
Properties prop = new Properties();
propload(input);
String value = propgetProperty("PropertyName");
inputclose();
第一步: 先获得classpath路径
String classpath = thisgetClass()getResource("/")getPath()replaceFirst("/", "");
这样子可以得到classpath路径,类似于:
F:/projects/JavaStudyParent/study-springmvc-junit-test/target/springmvc-junit-test/WEB-INF/classes/
然后把WEB-INF/classes截取就能获得WebAPP目录啦:
String webappRoot = classpathreplaceAll("WEB-INF/classes/", "");
得到的结果就是:
F:/projects/JavaStudyParent/study-springmvc-junit-test/target/springmvc-junit-test/
通过这个路径你就能获取该文件夹下的所有文件啦
文件从本地到服务器的功能,其实是为了解决目前浏览器不支持获取本地文件全路径。不得已而想到上传到服务器的固定目录,从而方便项目获取文件,进而使程序支持EXCEL批量导入数据。
java中文件上传到服务器的指定路径的代码:
在前台界面中输入:
<form method="post" enctype="multipart/form-data" action="/manage/excelImportdo">
请选文件:<input type="file" name="excelFile">
<input type="submit" value="导入" onclick="return impExcel();"/>
</form>
action中获取前台传来数据并保存
/
excel 导入文件
@return
@throws IOException
/
@RequestMapping("/usermanager/excelImportdo")
public String excelImport(
String filePath,
MultipartFile excelFile,>
loginfo("<<<<<<action:{} Method:{} start>>>>>>","usermanager","excelImport" );
if (excelFile != null){
String filename=excelFilegetOriginalFilename();
String a=requestgetRealPath("u/cms/>
SaveFileFromInputStream(excelFilegetInputStream(),requestgetRealPath("u/cms/>
}
loginfo("<<<<<<action:{} Method:{} end>>>>>>","usermanager","excelImport" );
return "";
}
/
将MultipartFile转化为file并保存到服务器上的某地
/
public void SaveFileFromInputStream(InputStream stream,String path,String savefile) throws IOException
{
FileOutputStream fs=new FileOutputStream( path + "/"+ savefile);
Systemoutprintln("------------"+path + "/"+ savefile);
byte[] buffer =new byte[10241024];
int bytesum = 0;
int byteread = 0;
while ((byteread=streamread(buffer))!=-1)
{
bytesum+=byteread;
fswrite(buffer,0,byteread);
fsflush();
}
fsclose();
streamclose();
}
在jsp和class文件中调用的相对路径不同。在jsp里,根目录是WebRoot 在class文件中,根目录是WebRoot/WEB-INF/classes 当然你也可以用SystemgetProperty("userdir")获取工程的绝对路径。
另:在Jsp,Servlet,Java中详细获得路径的方法!
1jsp中取得路径:
以工程名为TEST为例:
(1)得到包含工程名的当前页面全路径:requestgetRequestURI()
结果:/TEST/testjsp
(2)得到工程名:requestgetContextPath()
结果:/TEST
(3)得到当前页面所在目录下全名称:requestgetServletPath()
结果:如果页面在jsp目录下 /TEST/jsp/testjsp
(4)得到页面所在服务器的全路径:applicationgetRealPath("页面jsp")
结果:D:\resin\webapps\TEST\testjsp
(5)得到页面所在服务器的绝对路径:absPath=new javaioFile(applicationgetRealPath(requestgetRequestURI()))getParent();
结果:D:\resin\webapps\TEST
2在类中取得路径:
(1)类的绝对路径:ClassclassgetClass()getResource("/")getPath()
结果:/D:/TEST/WebRoot/WEB-INF/classes/pack/
(2)得到工程的路径:SystemgetProperty("userdir")
结果:D:\TEST
3在Servlet中取得路径:
(1)得到工程目录:requestgetSession()getServletContext()getRealPath("") 参数可具体到包名。
结果:E:\Tomcat\webapps\TEST
(2)得到IE地址栏地址:requestgetRequestURL()
结果:>
以上就是关于java怎么根据文件名获取文件绝对路径全部的内容,包括:java怎么根据文件名获取文件绝对路径、java 项目如何获取项目所在的物理根路径、java怎么读取java工程的文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)