① 如何獲取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;…