「java包路径很深」Java项目包路径不对
今天给各位分享java包路径很深的知识,其中也会对Java项目包路径不对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java项目中文件的路径
- 2、java包路径的问题
- 3、java 包内路径问题
- 4、对于Java中包的运用以及路径还是有几点不明白,我用的DOC 窗口+notepad做的练习,书上这块也讲的少
- 5、一个java包路径的问题
- 6、java文件路径问题
java项目中文件的路径
java项目中文件的路径-方法大全
一、 相对路径的获得
说明:相对路径(即不写明时候到底相对谁)均可通过以下方式获得(不论是一般的java项目还是web项目)
System.getProperty("user.dir");
上述相对路径中,java项目中的文件是相对于项目的根目录web项目中的文件路径视不同的web服务器不同而不同(tomcat是相对于tomcat安装目录\bin)
二 类加载目录的获得(即当运行时某一类时获得其装载目录)
1.1)通用的方法一(不论是一般的java项目还是web项目,先定位到能看到包路径的第一级目录)
InputStreamis=TestAction.class.getClassLoader().getResourceAsStream("test.txt"); (test.txt文件的路径为 项目名\src\test.txt;类TestPath所在包的第一级目录位于src目录下)
上式中将TestPath,test.txt替换成对应成相应的类名和文件名字即可
1.2)通用方法二 (此方法和1.1中的方法类似,不同的是此方法必须以'/'开头) InputStream is=Test1.class.getResourceAsStream("/test.txt");
(test.txt文件的路径为 项目名\src\test.txt,类Test1所在包的第一级目录位于src目录下)
三 web项目根目录的获得(发布之后)
1 从servlet出发
可建立一个servlet在其的init方法中写入如下语句(没有请求的话会抛空指针导常)
ServletContext s1=this.getServletContext();
String temp=s1.getRealPath("/"); (关键)
结果形如:F:\tomcat-6.0.36\webapps\test\(test为项目名字)
如果是调用了s1.getRealPath("")则输出F:\tomcat-6.0.36\webapps\test(少了一个"\")
2 从httpServletRequest出发(没有请求的话会抛空指针导常)
String path=request.getSession().getServletContext().getRealPath("/");
结果形如: F:\tomcat-6.0.36\webapps\test\
四 classpath的获取(在Eclipse中为获得src或者classes目录的路径),放在监听器,可以窗口启动获取路径
方法一 Thread.currentThread().getContextClassLoader().getResource("").getPath()
String path = Thread.currentThread().getContextClassLoader()
.getResource("").getPath();
System.out.println("path========" + path);输出: path========/F:/tomcat-6.0.36/webapps/test/WEB-INF/classes/
方法二 JdomParse.class.getClassLoader().getResource("").getPath() (JdomParse为src某一个包中的类,下同)
eg:String p1=JdomParse.class.getClassLoader().getResource("").getPath();
System.out.println("JdomParse.class.getClassLoader().getResource--"+p1);
输出:JdomParse.class.getClassLoader().getResource-/F:/tomcat-6.0.36/webapps/test/WEB-INF/classes/
另外,如果想把文件放在某一包中,则可以 通过以下方式获得到文件(先定位到该包的最后一级目录)
eg String p2=JdomParse.class.getResource("").getPath();
System.out.println("JdomParse.class.getResource---"+p2);
输出:JdomParse.class.getResource--/F:/tomcat-6.0.36/webapps/test/WEB-INF/classes/
(JdomParse为src目录下jdom包中的类)
四 属性文件的读取:
方法 一
InputStream in = lnewBufferedInputStream( new FileInputStream(name));
Properties p = new Properties(); p.load(in);
注意路径的问题,做执行之后就可以调用p.getProperty("name")得到对应属性的值
方法二
Locale locale =Locale.getDefault();
ResourceBundle localResource = ResourceBundle.getBundle("test/propertiesTest",locale);
String value = localResource.getString("test");
System.out.println("ResourceBundle: " + value);
工程src目录下propertiesTest.properties(名字后缀必须为properties)文件内容如下:
test=hello word
不通过Servlet获取路径
第一种实现
Java代码
URL url = ClassLoader.getSystemClassLoader().getResource("./");
File file =new File(url.getPath());
File parentFile =new File(file.getParent());
System.out.println("webRoot:"+parentFile.getParent());
第二种实现
首先写一个接听类 (推荐使用,容器启动时就执行,不会抛空指针异常,适合做定时器任务来删除服务器文件的路径)
Java代码:
package com.chinacreator.report.listener;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* @authorxiaoqun.yi
*/
public class PathListener implementsServletContextListener {
private staticServletContext servletContext;
public voidcontextDestroyed(ServletContextEvent sce) {
this.servletContext= sce.getServletContext();
System.out.println("path=======:"+servletContext.getRealPath("/"));
}
public voidcontextInitialized(ServletContextEvent arg0) {
}
}
在web.xml中加入如下配置
Java代码 :
listener
listener-classcom.chinacreator.report.listener.PathListener/listener-class
/listener
五、Java中的getResourceAsStream有以下几种:
1. Class.getResourceAsStream(String path) : path 不以’/'开头时默认是从此类所在的包下取资源,以’/'开头则是从ClassPath根下获取。其只是通过path构造一个绝对路径,最终还是由 ClassLoader(类加载器)(获取资源)
2. Class.getClassLoader.getResourceAsStream(String path) :默认则是从ClassPath根下获取,path不能以’/'开头,最终是由ClassLoader获取资源。
3. ServletContext. getResourceAsStream(String path):默认从WebAPP根目录下取资源,Tomcat下path是否以’/'开头无所谓,当然这和具体的容器实现有关。
4. Jsp下的application内置对象就是上面的ServletContext的一种实现。
其次,getResourceAsStream 用法大致有以下几种:
第一: 要加载的文件和.class文件在同一目录下,例如:com.x.y 下有类me.class ,同时有资源文件myfile.xml
那么,应该有如下代码:
me.class.getResourceAsStream("myfile.xml");
第二:在me.class目录的子目录下,例如:com.x.y 下有类me.class ,同时在 com.x.y.file 目录下有资源文件myfile.xml
那么,应该有如下代码:
me.class.getResourceAsStream("file/myfile.xml");
第三:不在me.class目录下,也不在子目录下,例如:com.x.y 下有类me.class ,同时在 com.x.file 目录下有资源文件myfile.xml
那么,应该有如下代码:
me.class.getResourceAsStream("/com/x/file/myfile.xml");
总结一下,可能只是两种写法
第一:前面有 “ / ”
“ / ”代表了工程的根目录,例如工程名叫做myproject,“ / ”代表了myproject
me.class.getResourceAsStream("/com/x/file/myfile.xml");
第二:前面没有 “ / ”
代表当前类的目录
me.class.getResourceAsStream("myfile.xml");
me.class.getResourceAsStream("file/myfile.xml");
java包路径的问题
老大,我想你没表达对你的意思吧.
包是路径的组合,是自动生成的.你的文件在
D:\Tomcat5.5\webapps\bbs\WEB-INF\classes\net\acai\forum和
D:\Tomcat5.5\webapps\bbs\WEB-INF\classes\net\acai\database这2个文件夹吧,那么自然包路径为net.ccai.forum和net.acai.database啊.你文件夹下面有包什么意思,是jar包?jar包通常放在lib目录下.
我想你没表达对你的意思.
java 包内路径问题
在文件中添加这句话就可以得到当前正在执行的class的路径
java中获得当前文件路径
path=new File(getClass().getClassLoader().getResource("").toURI()).getPath();
另外:
取程序运行时的目录路径。即程序在那里双击或BAT文件所在的路径
System.getProperties("user.dir");
对于Java中包的运用以及路径还是有几点不明白,我用的DOC 窗口+notepad做的练习,书上这块也讲的少
其实你说了那么多,本质上就是想知道JDK是怎么搜索相关类的问题,这其中有一个classpath的路径问题,这个classpath就是java在执行的时候,搜索class的路径,如果你想在你的类(假设为A)中使用另外的类(假设为B),那么B必须是在A可见的CLasspath路径下,通常JAva执行的时候 会在系统环境变量中查找classpath,所以我们一般会设置系统的环境 变量CLASSPATH,windows下一般配置如下:
要注意最后面那个 ., 表示吧当前目录为classpath路径,以便在搜索类的时候能够检索得到相关类。
对于包名,首先我们假设B已经放在了classpath路径下,那么接下来就是包名的问题了,如果你的包名是com.test, 那么你的这个java类最后生成的class就应该在com/test目录下,这样子才能找得到, import就需要使用包名,import com.test.B
一个java包路径的问题
再补充:如下所示,把所有18改成17即可
----------
补充:在Class18.java中,lz的import Mapack.pack1.Class16,写错了,应该是Mypack.pack1.Class16
--------------
先理清lz的目录,在目录D:\javawork\lesson5下,有两个文件:Class16.java,Class17.java,然后:
编译Class16.java时,命令如下:
javac -d . Class16.java .会自动出现Mypack\pack1目录,在这个新生成的目录下,出现编译后的文件Class16.class
注意:在环境变量CLASSPATH中,要加入.(表示当前目录),
然后在目录D:\javawork\lesson5下编译Class17.java:
javac -d . Class17.java,同样也会在Mypack\pack1目录下编译生成Class17.class 文件。
此时,还是在目录D:\javawork\lesson5下,运行命令:
java Mypack.pack1.Class17即可看到运行结果
java文件路径问题
假如你的工程根目录为:test
你的图片文件放在:test/src/images/a.gif
所以正确的调用是:
ImageIcon icon = new ImageIcon("src/images/a.gif");
这行代码执行时在test目录下查找到了文件,当然也可以写成
ImageIcon icon = new ImageIcon("./src/images/a.gif");
注意两者的区别,要记住的是src是在test下的目录
总结:所谓相对路径就是相对于工程根目录的位置
打包的话,最好用类进行定位(jar包里的类获取路径)
System.out.println(MyMenu.class.getResource("/")); //MyMenu换成你自己的类
输出下看看
拼接你的图片相对地址
java包路径很深的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于Java项目包路径不对、java包路径很深的信息别忘了在本站进行查找喔。
发布于:2022-11-30,除非注明,否则均为
原创文章,转载请注明出处。