① 如何获取classpath下实现某接口的所有类
如果你自己也不知道这个接口有哪些实现类的,采用java默认的ClassLoader是没有办法获得所有实现类的,因为ClassLoader是在程序运行期间才会加载类到static区域,即如果你的程序需要使用某一个class,jvm发现这个class还没有被ClassLoader加载,就会主动去加载,否则就跳过,你没办法知道那些未被加载的实现类。
如果你知道有哪些实现类的话,那就简单了,自己配置一个xml文件,把实现类的完整类名写在这个xml文件,再写一个解析程序,迭代每一个类名,直接用Class.forName加载就可以了。
甚至你可以去解析所有的java源文件或class文件,像eclipse之类的IDE就是这么干的,它管理工程下的所有class,解析这些class,这样我们写程序的时候,才有代码提示之类的功能。
如果你纯粹只想知道这个接口的实现类,在eclipse里面选中接口,按下F4,eclipse会为你列出所有的实现类
② 关于web工程中java类如何获取webapp路径下的文件
第一复步: 先获得classpath路径制
Stringclasspath=this.getClass().getResource("/").getPath().replaceFirst("/","");
这样子可以得到classpath路径,类似于:
F:/projects/JavaStudyParent/study-springmvc-junit-test/target/springmvc-junit-test/WEB-INF/classes/
然后把WEB-INF/classes截取就能获得WebAPP目录啦:
StringwebappRoot=classpath.replaceAll("WEB-INF/classes/","");
得到的结果就是:
F:/projects/JavaStudyParent/study-springmvc-junit-test/target/springmvc-junit-test/
通过这个路径你就能获取该文件夹下的所有文件啦
③ 如何CLASSPATH下的resource.properties文件进行读写操作
下面的代码是对resource.properties文件进行读操作:
Properties props = new Properties();
InputStream input= this.getClass().getClassLoader().getResourceAsStream("resource.properties");
try{
props.load(input);
}catch(Exception e){
System.err.println("CheckLogin:不能读取属性文件. " + "请确保resource.properties在CLASSPATH指定的路径中");
}
this.midaUser = props.getProperty("User");
this.midaPassword = props.getProperty("Password");
即分别读取该文件中User和Password的值,现在想对User和Password的值进行修改
④ 关于读取Properties文件的相对路径问题,怎么写是正确的
FileInputStream只能定位绝对路径,所以你填入相对路径当然找不到。
读取资源文件一般根据上下文环境分为两种情况。
第一种是非WEB应用的环境中,只需要简单的通过类加载器的getResourceAsStream方法读取。
例如,classpath根目录下有一个setting.properties文件,可以这样读取
Java代码 收藏代码
InputStream is = Thread.currentThread().getClass().getResourceAsStream("/setting.properties");
第二种是WEB应用的环境中,因为应用包含在了Servlet 容器中,所以情况相对来说要复杂一些。
同上一样,读取classpath中的资源,依然通过类加载读取,但是通过上下文的类加载器中去读。
例如,
Java代码 收藏代码
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("/setting.properties");
读取WebContent目录中的情况又不一样了,不能通过类加载器读取,需要通过ServletContext去读。
例如,
Java代码 收藏代码
InputStream is = request.getServletContext().getResourceAsStream("/WEB-INF/setting.properties");
⑤ java如何获取classpath中某文件的输出流
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URL;
import java.text.ParseException;
public class Test {
public String hello(String name) {
return "hello" + name;
}
public static void main(String args[]) throws ParseException, IOException{
URL file = Test.class.getClassLoader().getResource("");
System.out.println(file.getFile()+"a.txt");
try {
System.out.println(file.getFile()+"a.txt");
FileOutputStream fo = new FileOutputStream(file.getFile()+"a.txt");
System.out.println(file.getFile()+"a.txt");
String a = "aaaa";
fo.write(a.getBytes());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
我随便写了个,大致思想是 获得了路径后,当然能获得具体的输出流了
⑥ 如何用Spring读取JAR中的文件
通过Spring工具类获取classpath下的文件资源
1、资源文件不在jar中
Java代码
File cfgFile = ResourceUtils.getFile("classpath:test.txt");
或者
org.springframework.core.io.Resource fileRource = new ClassPathResource("test.txt");
获取文件:fileRource.getFile();
获取文件流:fileRource.getInputStream();
2、资源文件在jar中
Java代码
org.springframework.core.io.Resource fileRource = new ClassPathResource("test.txt");
⑦ java读取文件路径问题
如果你使用的是eclipse,请检查编译是否禁止了非.class文件的编译输出,如果这项没有问题。那么 src/META-INF/*.* 文件自动输出到 /WEB-INF/classes/META-INF/*.*。也就是说,最终资源文件在 WEB-INF/classes/META-INF/weibo.xml
使用JAVA 类获取路径:
Filef=newFile(getClass().getResource("/META-INF/weibo.xml").getPath());
获取InputStream:
InputStreaminput=getClass().getResourceAsStream("/META-INF/weibo.xml");
另外,JAVA项目的标准协定(习惯)中的源代码目录结构是:
js">src
|--main
||--javaJAVA文件
||--resources资源文件
|--test
|--javaTESTJAVA文件
|--resourcesTEST资源文件
输出的目录结构是:
target
|--classesmain/java,main/resource输出目录
|--test-classestest/java,test/resources输出目录
⑧ matlab2018b安装无法读取文件classpath.txt如何解决,急急急!
估计刚安装好的matlab是不会出现这个问题的,出现问题肯定是在某一次用360或者电脑管家清理垃圾之后才会出现这个问题。
首先声明我的matlab版本是matlab R2014a,下载链接:(额,网盘限制,上传不了超过4G大小的文件。。。要的私信吧=_=)...
破解过程网上有一大堆就不阐述了。
有如下解决方案:
方案1:
从别人的电脑上拷贝D:Program FilesMATLABR2014a oolboxlocal(这是我的matlab安装路径)路径下的文件,应该是有35个文件,但是一般会缺少4个左右,将缺少的相应文件拷贝到自己的matlab相应文件夹下。重新打开matlab,bingo~~~
方案2:
安装完毕之后,用自己的杀毒软件扫描垃圾,我的是电脑管家,找到如下界面:
那么在以后的清理垃圾时候就不会再清理这4个文件了。
吐槽就是不知道为什么会把这几个文件当成垃圾呢,还是QQ输入法下面的垃圾。。。。
⑨ 如何获取classpath下的log4j.properties文件的绝对路径
java获得当前文件路径
第一种:
File f = new File(this.getClass().getResource("/").getPath());
System.out.println(f);
结果:
C:\Documents%20and%20Settings\Administrator\workspace\projectName\bin
获取当前类的所在工程路径;
如果不加“/”
File f = new File(this.getClass().getResource("").getPath());
System.out.println(f);
结果:
C:\Documents%20and%20Settings\Administrator\workspace\projectName\bin\com\test
获取当前类的绝对路径;
第二种:
File directory = new File("");//参数为空
String courseFile = directory.getCanonicalPath() ;
System.out.println(courseFile);
结果:
C:\Documents and Settings\Administrator\workspace\projectName
获取当前类的所在工程路径;
第三种:
URL xmlpath = this.getClass().getClassLoader().getResource("selected.txt");
System.out.println(xmlpath);
结果:
file:/C:/Documents%20and%20Settings/Administrator/workspace/projectName/bin/selected.txt
获取当前工程src目录下selected.txt文件的路径
第四种:
System.out.println(System.getProperty("user.dir"));
结果:
C:\Documents and Settings\Administrator\workspace\projectName
获取当前工程路径
第五种:
System.out.println( System.getProperty("java.class.path"));
结果:
C:\Documents and Settings\Administrator\workspace\projectName\bin
获取当前工程路径
⑩ maven项目只能读到绝对路径下的文件,读不到相对路径下的文件
新建一个maven工程后,main目录下会有java和resources两个文件夹,其中java文件夹下存放源代码,resources文件夹下存放一些配置文件等。
maven%E5%B7%A5%E7%A8%8B%E7%BB%93%E6%9E%84%E5%9B%BE.pngJava: maven下读取资源文件的问题, java路径
在弄清楚编译后,资源文件以及字节码存在哪里这个问题之前,有必要明白什么是classpath
classpath实际上就是编译后的 以 classes 文件夹为起点的路径,而在ItelliJ IDEA 中编译后的文件都会存入out/proction下。
所以,编译后,resources文件夹中的文件以及java目录下的文件都会存入同一个目录(out/proction)下,也就是说,编译后是不存在java和resources这两个目录的。
读取资源文件的若干中方法
package me.shenchao.main;
import java.io.*;
/** * Created by jerry on 16-4-20. */
public class Demo1 {
private static void readTxt(String filePath) {
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(filePath));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
//获取classpath路径
System.out.println("classpath路径: "+Demo1.class.getClassLoader().getResource("").getPath());
//获取当前类的加载路径
System.out.println("当前类加载路径: "+Demo1.class.getResource("").getPath());
// 读取文件resources目录中文件的若干种方法
// 方法一:从classpath路径出发读取
readTxt(Demo1.class.getClassLoader().getResource("test/demo1.txt").getPath());
// 方法二:从类加载路径出发,相当于使用绝对路径
readTxt(Demo1.class.getResource("/test/demo1.txt").getPath());
// 方法三:从类加载路径出发,相当于使用相对路径
readTxt(Demo1.class.getResource("../../../test/demo1.txt").getPath());
}
}
其中demo1.txt文件中内容为:
hahahahahahahahahha
输出如下:
classpath路径: /home/jerry/IdeaProjects/Demo/out/proction/demo1/
当前类加载路径: /home/jerry/IdeaProjects/Demo/out/proction/demo1/me/shenchao/main/
hahahahahahahahahha
hahahahahahahahahha
hahahahahahahahahha
从上面可以发现getResource 与 class.getClassLoader().getResource两者的区别:
前者获取的是当前类加载的路径,如果用此方法读取文件则有两种方法,与相对路径绝对路径非常类似,具体参见代码
后者获取的是类加载器的路径,即会到classpath路径下。可以理解当前在 classp/ 目录下,要想访问哪个文件,直接填写路径即可,不用区分相对路径和绝对路径。显然,此方法比较容易写出。推荐。
.gif
相关
Related Posts
JAVA: 理解Java中的类初始化
在运行 Java 代码时,很多时候需要弄清楚程序执行的流程,而面向对象的 Java 程序并非像主要为面向过程而设计的 C 语言一样去顺序执行(简单按照代码的顺序),这使得对于类文件的加载以及执行流程的理解非常重要。本文简单介绍了 Java 类的初始化部分具体过程,包括成员变量、静态代码块、构造函数等的初始化时机及执行流程。 初始化时机 根据 javase 8 的文档说明[1],一个类(本文暂不考虑接口)T…
JAVA: 获取当前月份c.get(Calendar.MONTH)中月份少一个月
@Test public void testGetTitle(){ System.out.println(new LocalDate().minusDays(1).toString("MM/dd/yyyy")); // joda-time Calendar c1 = Calendar.getInstance(); int year…
JAVA: 读写文件的几种方法
如果您使用java8,可以也参考这篇文章:JAVA: Java8流逐行读取文件 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.text.SimpleDateFormat;…