2010-05-07 126 views
9

我需要在我的WebContent目錄中獲取文件的真實路徑,以便我使用的框架可以訪問該文件。它只需要String文件作爲屬性,所以我需要在WebContent目錄中獲取此文件的真實路徑。如何在我的WebContent文件夾中獲得文件的真實路徑?

我使用Spring框架,所以應該可以在Spring中創建解決方案。

回答

12

如果你需要在一個servlet中使用這個,然後使用getServletContext().getRealPath("/filepathInContext")

+4

讓控制器執行ServlexContextAware – OrangeDog 2010-12-07 23:35:52

+1

OrangeDog的評論是正確的。只是一個快速更正,它應該是ServletContextAware(不是Servlex ...) – Felby 2012-08-22 19:50:03

0

在這些情況下,我傾向於將我需要的內容作爲資源(MyClass.getClass()。getResourceAsStream())提取出來,將其作爲文件寫入臨時位置,並將此文件用於其他調用。

這樣我就不必打擾只包含在罐子裏的內容,或者根據我當前使用的Web容器找到的內容。

+0

@tangens - 我不認爲他想讀取來自web應用的類加載器的資源;例如WAR中的JAR中的文件。他只想獲取Web容器中文件的路徑名。 – 2010-05-07 06:05:12

0

包含請求作爲參數。那麼Spring會通過請求對象時,它調用映射的方法

@RequestMapping ..... 
public String myMethod(HttpServletRequest request) { 
    String realPath = request.getRealPath("/somefile.txt"); 
    ... 
0

這種方法使用的資源加載器來獲取絕對路徑到應用中的文件,然後將幾個文件夾上傳到應用的根文件夾。不需要servlet上下文!如果您的WEB-INF文件夾中有「web.xml」,這應該可以工作。請注意,您可能會考慮將其僅用於開發,因爲此類配置通常最好從應用程序的外部存儲。 。

public String getAppPath() 
{ 
    java.net.URL r = this.getClass().getClassLoader().getResource("web.xml"); 
    String filePath = r.getFile(); 
    String result = new File(new File(new File(filePath).getParent()).getParent()).getParent(); 

    if (! filePath.contains("WEB-INF")) 
    { 
     // Assume we need to add the "WebContent" folder if using Jetty. 
     result = FilenameUtils.concat(result, "WebContent"); 
    } 

    return result; 
} 
12

getServletContext()方法getRealPath( 「」) - 這樣,如果正在提供從一個.war檔案內容將無法正常工作。 getServletContext()將爲空。

在這種情況下,我們可以用另一種方式獲得真實路徑。這是例子得到一個路徑的屬性文件C:/ Program Files文件/ Tomcat的6/webapps /下的myapp/WEB-INF /班/ somefile.properties:

// URL returned "/C:/Program%20Files/Tomcat%206.0/webapps/myapp/WEB-INF/classes/" 
URL r = this.getClass().getResource("/"); 

// path decoded "/C:/Program Files/Tomcat 6.0/webapps/myapp/WEB-INF/classes/" 
String decoded = URLDecoder.decode(r.getFile(), "UTF-8"); 

if (decoded.startsWith("/")) { 
    // path "C:/Program Files/Tomcat 6.0/webapps/myapp/WEB-INF/classes/" 
    decoded = decoded.replaceFirst("/", ""); 
} 
File f = new File(decoded, "somefile.properties"); 
-1

嘗試,當你想用就用這個arff.txt在開發和生產水平也

String path=getServletContext().getRealPath("/WEB-INF/files/arff.txt"); 
+0

儘管這段代碼可能是解決方案,[包括解釋](// meta.stackexchange.com/questions/114762/explaining-entirely-基於代碼的答案)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 – yivi 2017-12-29 10:05:13

+0

@yivi我更新了它,如果你發現它投票最多 – 2017-12-29 10:16:54

1

你必須告訴Java改變從你的電腦的路徑到你的Java項目,所以 如果你使用的彈簧使用:

@Autowired 
ServletContext c; 

String UPLOAD_FOLDEdR=c.getRealPath("/images"); 

,但如果你使用servlets時只使用

String UPLOAD_FOLDEdR = ServletContext.getRealPath("/images"); 

這樣的路徑將是/webapp/images/ :)

相關問題