كيف يمكنني الحصول على مسار حقيقي للملف في مجلد WebContent الخاص بي؟

StackOverflow https://stackoverflow.com/questions/2786426

سؤال

أحتاج إلى الحصول على مسار حقيقي للملف في دليل WebContent الخاص بي ، بحيث يمكن لهذا الإطار الذي أستخدمه الوصول إلى هذا الملف. لا يأخذ سوى ملف السلسلة كسمة ، لذلك أحتاج إلى الحصول على المسار الحقيقي لهذا الملف في دليل WebContent.

أستخدم إطار عمل الربيع ، لذلك يجب أن يكون الحل في الربيع.

هل كانت مفيدة؟

المحلول

إذا كنت بحاجة إلى هذا في servlet ثم استخدم getServletContext().getRealPath("/filepathInContext")!

نصائح أخرى

GetServletContext (). getRealPath ("") - بهذه الطريقة لن تعمل إذا تم توفير المحتوى من أرشيف. GetServletContext () سيكون فارغا.

في هذه الحالة ، يمكننا استخدام طريقة أخرى للحصول على مسار حقيقي. هذا مثال على الحصول على مسار إلى ملف الخصائص 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");

يجب أن تخبر Java بتغيير المسار من جهاز الكمبيوتر الخاص بك إلى مشروع Java الخاص بك ، لذا إذا كنت تستخدم استخدام الربيع:

@Autowired
ServletContext c;

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

ولكن إذا كنت تستخدم servlets فقط استخدم

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

لذلك سيكون المسار /webapp/images/ :)

في مثل هذه المواقف ، أميل إلى استخراج المحتوى الذي أحتاجه كمورد (myClass.getClass (). getResourCeasStream ()) ، واكتبه كملف إلى موقع مؤقت واستخدم هذا الملف للمكالمة الأخرى.

وبهذه الطريقة ، لا يجب أن أزعج المحتوى الموجود فقط في الجرار أو يقع في مكان ما اعتمادًا على حاوية الويب التي أستخدمها حاليًا.

قم بتضمين الطلب كمعلمة. سيقوم الربيع بعد ذلك بتمرير كائن الطلب عندما يتصل بالطريقة المعينة

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

يمكنك استخدام واجهة موارد الربيع (وخاصة ServletContextResource): http://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/core/io/resource.html

يستخدم هذا النهج محمل الموارد للحصول على المسار المطلق إلى ملف في التطبيق الخاص بك ، ثم يرتفع بضع مجلدات إلى مجلد جذر التطبيق. لا سياق servlet المطلوب! يجب أن يعمل هذا إذا كان لديك "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;
}

حاول استخدام هذا عندما تريد استخدام ARFF.TXT في مستوى التطوير والإنتاج أيضًا

  String path=getServletContext().getRealPath("/WEB-INF/files/arff.txt");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top