天天看點

關于Java檔案路徑問題

1.如何獲得目前檔案路徑

常用:

字元串類型:System.getProperty("user.dir");

綜合:

package com.zcjl.test.base;

import java.io.File;

public class Test {

    public static void main(String[] args) throws Exception {

        System.out.println(

            Thread.currentThread().getContextClassLoader().getResource(""));

        System.out.println(Test.class.getClassLoader().getResource(""));

        System.out.println(ClassLoader.getSystemResource(""));

        System.out.println(Test.class.getResource(""));

        System.out.println(Test.class.getResource("/"));

        System.out.println(new File("").getAbsolutePath());

        System.out.println(System.getProperty("user.dir"));

    }

}

file:/E:/workSpace/javaTest/target/classes/

file:/E:/workSpace/javaTest/target/classes/

file:/E:/workSpace/javaTest/target/classes/

file:/E:/workSpace/javaTest/target/classes/javaAPI/

file:/E:/workSpace/javaTest/target/classes/

E:/workSpace/javaTest

E:/workSpace/javaTest

2.Web服務中

(1).Weblogic

WebApplication的系統檔案根目錄是你的weblogic安裝所在根目錄。

例如:如果你的weblogic安裝在c:/bea/weblogic700.....

那麼,你的檔案根路徑就是c:/.

是以,有兩種方式能夠讓你通路你的伺服器端的檔案:

a.使用絕對路徑:

比如将你的參數檔案放在c:/yourconfig/yourconf.properties,

直接使用 new FileInputStream("/yourconfig/yourconf.properties");

b.使用相對路徑:

相對路徑的根目錄就是你的webapplication的根路徑,即WEB-INF的上一級目錄,将你的參數檔案放在yourwebapp/yourconfig/yourconf.properties,

這樣使用:

new FileInputStream("yourconfig/yourconf.properties");

這兩種方式均可,自己選擇。

(2).Tomcat

在類中輸出System.getProperty("user.dir");顯示的是%Tomcat_Home%/bin

(3).Resin

不是你的JSP放的相對路徑,是JSP引擎執行這個JSP編譯成SERVLET

的路徑為根.比如用建立檔案法測試File f = new File("a.htm");

這個a.htm在resin的安裝目錄下

(4).如何讀相對路徑哪?

在Java檔案中getResource或getResourceAsStream均可

例:getClass().getResourceAsStream(filePath);//filePath可以是"/filename",這裡的/代表web釋出根路徑下WEB-INF/classes

也可以getClass().getClassLoader().getResourceAsStream(filePath)//filePath不是帶“/”的

(5).獲得檔案真實路徑

string  file_real_path=request.getRealPath("mypath/filename"); 

通常使用request.getRealPath("/"); 

 4.遺留問題

目前new FileInputStream()隻會使用絕對路徑,相對

  InputStream in1 = new FileInputStream("abc1.properties"); // 相對路徑

  InputStream in2 = new FileInputStream("/abc2.properties"); // 絕對路徑,E盤下

  InputStream in3 = new FileInputStream("e://abc3.properties"); //相對路徑

5.按Java檔案類型分類讀取配置檔案

配 置檔案是應用系統中不可缺少的,可以增加程式的靈活性。java.util.Properties是從jdk1.2就有的類,一直到現在都支援load ()方法,jdk1.4以後save(output,string) ->store(output,string)。如果隻是單純的讀,根本不存在煩惱的問題。web層可以通過 Thread.currentThread().getContextClassLoader().

getResourceAsStream("xx.properties") 擷取;

Application可以通過new FileInputStream("xx.properties");直接在classes一級擷取。關鍵是有時我們需要通過web修改配置檔案,我們不 能将路徑寫死了。經過測試覺得有以下心得:

1.servlet中讀寫。如果運用Struts 或者Servlet可以直接在初始化參數中配置,調用時根據servlet的getRealPath("/")擷取真實路徑,再根據String file = this.servlet.getInitParameter("abc");擷取相對的WEB-INF的相對路徑。

例:

InputStream input = Thread.currentThread().getContextClassLoader().

getResourceAsStream("abc.properties");

Properties prop = new Properties();

prop.load(input);

input.close();

OutputStream out = new FileOutputStream(path);

prop.setProperty("abc", “test");

prop.store(out, “–test–");

out.close();

2.直接在jsp中操作,通過jsp内置對象擷取可操作的絕對位址。

例:

// jsp頁面

String path = pageContext.getServletContext().getRealPath("/");

String realPath = path+"/WEB-INF/classes/abc.properties";

//java 程式

InputStream in = getClass().getClassLoader().getResourceAsStream("abc.properties"); // abc.properties放在webroot/WEB-INF/classes/目錄下

prop.load(in);

in.close();

OutputStream out = new FileOutputStream(path); // path為通過頁面傳入的路徑

prop.setProperty("abc", “abcccccc");

prop.store(out, “–test–");

out.close();

3.隻通過Java程式操作資源檔案

InputStream in = new FileInputStream("abc.properties"); // 相對路徑,項目下的路徑

OutputStream out = new FileOutputStream("abc.properties");

繼續閱讀