㈠ java中如何讀取src下所有的properties文件
最常用讀取properties文件的方法
InputStream in = getClass().getResourceAsStream("資源Name");這種方式要求properties文件和當前類在同一文件夾下面。如果在不同的包中,必須使用:
InputStream ins = this.getClass().getResourceAsStream("/cn/zhao/properties/testPropertiesPath2.properties");
Java中獲取路徑方法
獲取路徑的一個簡單實現
反射方式獲取properties文件的三種方式
1 反射方式獲取properties文件最常用方法以及思考:
Java讀取properties文件的方法比較多,網上最多的文章是"Java讀取properties文件的六種方法",但在Java應用中,最常用還是通過java.lang.Class類的getResourceAsStream(String name) 方法來實現,但眾多讀取properties文件的代碼中,都會這么做:
InputStream in = getClass().getResourceAsStream("資源Name");
這裡面有個問題,就是getClass()調用的時候默認省略了this,this是不能在static(靜態)方法或者static塊中使用的,原因是static類型的方法或者代碼塊是屬於類本身的,不屬於某個對象,而this本身就代表當前對象,而靜態方法或者塊調用的時候是不用初始化對象的。
問題是:假如不想讓某個類有對象,那麼會將此類的默認構造方法設為私有,當然也不會寫別的共有的構造方法。並且我這個類是工具類,都是靜態的方法和變數,要在靜態塊或者靜態方法中獲取properties文件,這個方法就行不通了。
其實這個類就不是這么用的,他僅僅是需要獲取一個Class對象就可以了,那就容易了,
取所有類的父類Object,用Object.class比用正在寫類自身方便安全,下面給出一個例子,以方便交流。
import java.util.Properties;
import java.io.InputStream;
import java.io.IOException;
/**
* 讀取Properties文件的例子
* File: TestProperties.java
* User: leimin
* Date: 2008-2-15 18:38:40
*/
public final class TestProperties {
private static String param1;
private static String param2;
static {
Properties prop = new Properties();
InputStream in = Object. class .getResourceAsStream( "/test.properties" );
try {
prop.load(in);
param1 = prop.getProperty( "initYears1" ).trim();
param2 = prop.getProperty( "initYears2" ).trim();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 私有構造方法,不需要創建對象
*/
private TestProperties() {
}
public static String getParam1() {
return param1;
}
public static String getParam2() {
return param2;
}
public static void main(String args[]){
System.out.println(getParam1());
System.out.println(getParam2());
}
}
運行結果:
151
152
當然,把Object.class換成int.class也行。
另外,如果是static方法或塊中讀取Properties文件,還有一種最保險的方法,就是這個類的本身名字來直接獲取Class對象,比如本例中可寫成TestProperties.class,這樣做是最保險的方法。
2 獲取路徑的方式:
File fileB = new File( this .getClass().getResource( "" ).getPath());
System. out .println( "fileB path: " + fileB);
2.2獲取當前類所在的工程名:
System. out .println("user.dir path: " + System. getProperty ("user.dir"))<span style="background-color: white;">3 獲取路徑的一個簡單的Java實現</span>
/**
*獲取項目的相對路徑下文件的絕對路徑
*
* @param parentDir
*目標文件的父目錄,例如說,工程的目錄下,有lib與bin和conf目錄,那麼程序運行於lib or
* bin,那麼需要的配置文件卻是conf裡面,則需要找到該配置文件的絕對路徑
* @param fileName
*文件名
* @return一個絕對路徑
*/
public static String getPath(String parentDir, String fileName) {
String path = null;
String userdir = System.getProperty("user.dir");
String userdirName = new File(userdir).getName();
if (userdirName.equalsIgnoreCase("lib")
|| userdirName.equalsIgnoreCase("bin")) {
File newf = new File(userdir);
File newp = new File(newf.getParent());
if (fileName.trim().equals("")) {
path = newp.getPath() + File.separator + parentDir;
} else {
path = newp.getPath() + File.separator + parentDir
+ File.separator + fileName;
}
} else {
if (fileName.trim().equals("")) {
path = userdir + File.separator + parentDir;
} else {
path = userdir + File.separator + parentDir + File.separator
+ fileName;
}
}
return path;
}
4 利用反射的方式獲取路徑:
InputStream ips1 = Enumeration . class .getClassLoader() .getResourceAsStream( "cn/zhao/enumStudy/testPropertiesPath1.properties" );
InputStream ips2 = Enumeration . class .getResourceAsStream( "testPropertiesPath1.properties" );
InputStream ips3 = Enumeration . class .getResourceAsStream( "properties/testPropertiesPath2.properties" );
㈡ Java 獲取配置文件路徑
讀取配置文件 , xxx.properties放在webroot/WEB-INF/classes/目錄下
首先將配置文件轉換成InputStream,有兩種方式,原理一樣,都是通過類載入器得到資源:
(1)InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("xx.properties");
(2) InputStream inputStream =
this.getClass() .getClassLoader().getResourceAsStream( "xx.properties" );
調用對象的getClass()方法是獲得對象當前的類類型,這部分數據存在方法區中,
而後在類類型上調用 getClassLoader()方法是得到當前類型的類載入器,我們知道在Java中所有的類都是通過載入器載入到虛擬機中的,而且類載入器之間存在父 子關系,就是子知道父,父不知道子,這樣不同的子載入的類型之間是無法訪問的(雖然它們都被放在方法區中),所以在這里通過當前類的載入器來載入資源也就 是保證是和類類型同一個載入器載入的。
最後調用了類載入器的getResourceAsStream()方法來載入資源。
(3) 然後載入配置文件,讀取屬性值
Properties prop = new Properties();
prop.load(input);
String value = prop.getProperty("PropertyName");
input.close();
㈢ java怎麼獲取resources下的文件路徑
在Java中,要獲取resources下的文件路徑,你需要明確資源文件的位置並進行適當的路徑處理。首先,你需要通過以下步驟操作:
1. 導入必要的庫,如DocumentBuilderFactory和DocumentBuilder:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
2. 讀取資源文件時,文件路徑通常以"src/main/resources/"開始,接著是文件名。例如,如果你的文件在"config"文件夾下的"settings.xml",路徑會是:
String xmlFilePath = "/config/settings.xml"; // 假設在resources目錄下
3. 將路徑字元串與資源路徑結合起來:
String absolutePath = "classpath:" + xmlFilePath;
InputStream inputStream = ClassLoader.getSystemResourceAsStream(absolutePath);
4. 通過DocumentBuilder解析文件:
Document document = builder.parse(new InputSource(inputStream));
// ...然後進行後續處理,如getElementsByTag()...
記住,處理資源文件路徑時,要確保路徑格式正確,否則可能無法找到文件。以上步驟可以幫助你獲取和處理resources下的文件路徑。
㈣ JAVA如何得到文件路徑
用
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.filechooser.FileFilter;
public class FileChooserDemo extends JPanel {
static final long serialVersionUID = 5854418136127725290L;
public class ExtensionFilter extends FileFilter {
private String extensions[];
private String description;
public ExtensionFilter(String description, String extension) {
this(description, new String[] { extension });
}
public ExtensionFilter(String description, String extensions[]) {
this.description = description;
this.extensions = (String[]) extensions.clone();
}
public boolean accept(File file) {
if (file.isDirectory()) {
return true;
}
int count = extensions.length;
String path = file.getAbsolutePath();
for (int i = 0; i < count; i++) {
String ext = extensions[i];
if (path.endsWith(ext)
&& (path.charAt(path.length() - ext.length()) == '.')) {
return true;
}
}
return false;
}
public String getDescription() {
return (description == null ? extensions[0] : description);
}
}
public FileChooserDemo() {
JButton jb = new JButton("Open File Viewer");
add(jb);
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser(".");
// chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
FileFilter type1 = new ExtensionFilter("Java source", ".java");
FileFilter type2 = new ExtensionFilter("Image files",
new String[] { ".jpg", ".gif", "jpeg", "xbm" });
FileFilter type3 = new ExtensionFilter("HTML files",
new String[] { ".htm", ".html" });
chooser.addChoosableFileFilter(type1);
chooser.addChoosableFileFilter(type2);
chooser.addChoosableFileFilter(type3);
chooser.setAcceptAllFileFilterUsed(true);
chooser.setFileFilter(type2); // Initial filter setting
int status = chooser.showOpenDialog(FileChooserDemo.this);
if (status == JFileChooser.APPROVE_OPTION) {
File f = chooser.getSelectedFile();
System.out.println(f);
}
}
};
jb.addActionListener(listener);
}
public static void main(String args[]) {
JFrame f = new JFrame("Enhanced File Example");
JPanel j = new FileChooserDemo();
f.getContentPane().add(j, BorderLayout.CENTER);
f.setSize(300, 200);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
㈤ java怎樣提取配置文件
java讀取配置文件的幾種方法如下:
方式一:採用ServletContext讀取,讀取配置文件的realpath,然後通過文件流讀取出來。因為是用ServletContext讀取文件路徑,所以配置文件可以放入在web-info的classes目錄中,也可以在應用層級及web-info的目錄中。文件存放位置具體在eclipse工程中的表現是:可以放在src下面,也可放在web-info及webroot下面等。因為是讀取出路徑後,用文件流進行讀取的,所以可以讀取任意的配置文件包括xml和properties。缺點:不能在servlet外面應用讀取配置信息。
方式二:採用ResourceBundle類讀取配置信息,
優點是:可以以完全限定類名的方式載入資源後,直接的讀取出來,且可以在非Web應用中讀取資源文件。缺點:只能載入類classes下面的資源文件且只能讀取.properties文件。
方式三:採用ClassLoader方式進行讀取配置信息
優點是:可以在非Web應用中讀取配置資源信息,可以讀取任意的資源文件信息
缺點:只能載入類classes下面的資源文件。
方法4 getResouceAsStream
XmlParserHandler.class.getResourceAsStream 與classloader不同
使用的是當前類的相對路徑
㈥ 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輸出目錄