不知道为啥,这个main方法能运行出来,但监听运行后为空
ParseObject.java
//(1)保存java包名、类名
private static List<String> javaPathList = new ArrayList<String>();
public static void main(String[] args) {
init();
}
public static void init(){
System.out.println("----------(1)获取包名/类名------------");
getJavaPath(new File("src/main/java"));
System.out.println(javaPathList);
}
//1.获取所有java包名
public static void getJavaPath(File file){
if(file.isFile()){
//是文件
String path = file.getPath();
path = path.replace("src\\main\\java\\", "");
if(path.contains(".java")){
path = path.replace(".java","").replace("\\",".");
javaPathList.add(path);
}
}else{
//是文件夹
File[] files = file.listFiles();
System.out.println("main函数运行存在,但监听却为空"+Arrays.toString(files));
for (File f: files){
//现在不确定是文件或文件夹
getJavaPath(f);//递归
}
}
}
使用main方法运行
监听类
public class InitListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("监视器初始化---开始");
ParseObject.init();
System.out.println("监视器初始化---结束");
}
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
}
Tomcat运行
System.out.println(new File(".").getAbsolutePath())
在main方法启动的时候,用"src/main/java"可以获取到路径
但是tomcat启动的话,用“"src/main/java"”是获取不到的
可以改为流的方式:
InputStream in = this.getClass().getResourceAsStream("/");
Properties properties = new Properties();
properties.load(in);
properties.getProperty("property_name");
Lz,我的硬盘有个src/test路径,你的硬盘一定有吗?
你在本地运行可以,是因为程序是相对于当前的本地来找你的路径的,但是tomcat,是相对于服务器当前的路径来找路径的。(一般是你的WEB-INF下的lib下对应jar的class所在的路径)
所以,你要么new File的时候使用绝对路径,即成c:\src\test之类的,要么就保证你的服务器路径下有存在你的file路径。(就你那个class所在的路径)
提供参考实例【(踩坑)Java项目用File读取文件时,获取文件路径问题(weblogic部署时classes目录为空,被打成jar包放在lib下)】,链接:https://blog.csdn.net/desmoker/article/details/125424059
【该博文以第一人的方式讲述了使用的是tomcat服务器,应用启动后一切正常;发布测试环境使用的是weblogic服务器,发现File类读取docx和ftl模板,无法找到文件,详细分析,代码注解清晰,并提出2种参考思路:
第一种:文件在resource资源目录下,以流的形式读取文件并在classes目录下创建该文件(第一次运行时创建),之后正常路径在classes中读取文件。如果你只想获取流,可以直接获取,我是因为必须用到File对象,所以需要创建文件。
第二种:(最后项目中用的这种方法)将文件放到webapp 目录下,可以直接获取文件路径。应该能对你有所帮助】
.java又不是能直接运行的,真实运行是先编译成.class文件,你应该看一下你编译之后的类路径