web-dev-qa-db-ja.com

WebContentフォルダー内のファイルの実際のパスを取得するにはどうすればよいですか?

使用するフレームワークがそのファイルにアクセスできるように、WebContentディレクトリ内のファイルの実際のパスを取得する必要があります。属性として文字列ファイルのみを取得するため、WebContentディレクトリでこのファイルへの実際のパスを取得する必要があります。

私はSpringFrameworkを使用しているので、Springでソリューションを作成できるはずです。

10
newbie

サーブレットでこれが必要な場合は、getServletContext().getRealPath("/filepathInContext")!を使用してください。

13
Shyam

getServletContext()。getRealPath( "")-コンテンツが.warアーカイブから利用可能になっている場合、この方法は機能しません。 getServletContext()はnullになります。

この場合、別の方法を使用して実際のパスを取得できます。これは、プロパティファイルC:/ Program Files/Tomcat 6/webapps/myapp/WEB-INF/classes /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");
12
A Kunin

Javaに、PCからJavaプロジェクトにパスを変更するように指示する必要があるため、Springを使用する場合は:

@Autowired
ServletContext c;

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

ただし、サーブレットを使用する場合は、

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

したがって、パスは/webapp/images/になります:)

1
Raslan

このアプローチでは、リソースローダーを使用してアプリ内のファイルへの絶対パスを取得してから、いくつかのフォルダーをアプリのルートフォルダーに移動します。サーブレットコンテキストは必要ありません!これは、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;
}
0
Brad Parks

Spring Resourceインターフェース(特にServletContextResource)を使用できます: http://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/core/io/Resource.html

0
Thomas Vanstals

このような状況では、必要なコンテンツをリソースとして抽出し(MyClass.getClass()。getResourceAsStream())、一時的な場所にファイルとして書き込み、このファイルを他の呼び出しに使用する傾向があります。

このようにして、jarファイルにのみ含まれているコンテンツや、現在使用しているWebコンテナーに応じてどこかにあるコンテンツを気にする必要がありません。

0
tangens

リクエストをパラメータとして含めます。その後、Springはmappedメソッドを呼び出すときにリクエストオブジェクトを渡します

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