Java讀取工程裏的文件

Java讀取工程裏的文件

我們會經常遇到這樣的問題,工程裏有一個文件,Java程序要讀取這個文件,不採用絕對路徑的方法,而使用相對路徑來讀取文件。以後遷移到其他機器上就不會出現讀取文件失敗的問題了。以下就介紹java如何讀取相對路徑的文件。

1.java project環境,使用java.io用相對路徑讀取文件的例子:
 *目錄結構:
  MyProject
    |___src
  |___com.etrip.SamplesReader.java
    |___resources
  |___train.txt,列車時刻表.xls
 *SamplesReader.java:
  String filepath="resource/train.txt";//*注意:相對路徑的起始處無斜槓"/"
  File file=new File(filepath);

  *我們留意filepath的內容,java.io默認定位到當前用戶目錄("user.dir")下,即:工程根目錄"d:\workspace\MyProject"下,
  因此,此時的相對路徑(以user.dir爲基路徑的路徑)爲"resources/train.txt"。
  這樣,JVM就可以根據"user.dir"與"resource/train.txt"得到完整的路徑(即絕對路徑)"d:\workspace\MyProject\resources\train.txt",從來找到train.txt文件。

2.javaEE環境,使用Classloader用相對路徑讀取xml的例子
  java使用相對路徑讀取xml文件:

  一、xml文件一般的存放位置有三個:
  a)放在WEB-INF下;
  b)xml文件放在/WEB-INF/classes目錄下或classpath的jar包中;
  c)放在與解析它的java類同一個包中,不一定是classpath;

  二、相對應的兩種使用相對路徑的讀取方法:
  方法一:將xml文件放在WEB-INF目錄下,
  程序代碼:
  InputStream is=getServletContext().getResourceAsStream("/WEB-INF/*.xml");

  方法二:將xml文件放在/WEB-INF/classes目錄下或classpath的jar包中,則可以使用ClassLoader的靜態方法getSystemResourceAsStream(String s)讀取;
  程序代碼:
  String s_xmlpath="com/etrip/web/ext/xml/hotspot.xml";
  InputStream in=ClassLoader.getSystemResourceAsStream(s_xmlpath);

  方法三:xml在隨意某個包路徑下:
  String s_xmlpath="com/etrip/web/ext/xml/hotspot.xml";
  ClassLoader classLoader=Main.class.getClassLoader();
  InputStream in=classLoader.getResourceAsStream(s_xmlpath);

  必須通過ClassLoader來執行getResourceAsStream()方法。獲取ClassLoader有兩種方式:
  InputStream in = Main.class.getClassLoader().getResourceAsStream(xmlfilename);
  InputStream in = Main.this.getClass().getClassLoader().getResourceAsStream(xmlfilename);

 

發佈了59 篇原創文章 · 獲贊 1 · 訪問量 7922
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章