11

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

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

4

9 に答える 9

13

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

于 2010-05-07T05:48:54.937 に答える
13

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");
于 2012-11-06T04:51:08.257 に答える
2

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

@Autowired
ServletContext c;

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

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

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

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

于 2018-01-27T17:52:13.777 に答える
0

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

@RequestMapping .....
public String myMethod(HttpServletRequest request) {
   String realPath = request.getRealPath("/somefile.txt");
   ...
于 2010-05-07T06:11:53.000 に答える
0

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

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

于 2010-05-07T05:40:19.197 に答える
0

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

于 2010-05-07T07:30:06.660 に答える
0

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

私の解決策:..../ webapps / mydir /(..../ webapps / ROOT /../ mydir /)

String dir = request.getSession().getServletContext().getRealPath("/")+"/../mydir";
            Files.createDirectories(Paths.get(dir));
于 2020-11-27T12:24:51.770 に答える
-1

開発および本番レベルでもarff.txtを使用する場合は、これを使用してみてください

  String path=getServletContext().getRealPath("/WEB-INF/files/arff.txt");
于 2017-12-29T08:17:48.450 に答える