كيفية تحديد FilePath في جافا؟
-
18-09-2019 - |
سؤال
لقد أنشأت تطبيق Java ل "Debian Linux". الآن أريد أن يقوم هذا التطبيق بقراءة ملف تم وضعه في الدليل الذي تم تحديد ملف جرة لهذا التطبيق. إذن ماذا تحدد في حجة كائن الملف؟
File fileToBeReaded = new File(...);
ما لتحديده كوسيطة للبيان أعلاه لتحديد الفائيل النسبي الذي يمثل المسار حيث تم وضع ملف جرة للتطبيق؟
المحلول
إذا كنت تعرف اسم الملف، بالطبع هو ببساطة
new File("./myFileName")
إذا كنت لا تعرف الاسم، فيمكنك استخدام أسلوب قائمة كائنات الملفات () للحصول على قائمة بالملفات الموجودة في الدليل الحالي، ثم اختر الشخص الذي تريده.
نصائح أخرى
باستخدام المسارات النسبية في java.io.File
يعتمد تماما على دليل العمل الحالي. هذا يختلف مع طريقة تنفيذ الجرة. إذا كنت على سبيل المثال في /foo
وأنت تنفذ الجرة java -jar /bar/jar/Bar.jar
ثم لا يزال دليل العمل /foo
. وبعد ولكن إذا كنت cd
ل /bar/jar
وتنفيذ java -jar Bar.jar
ثم دليل العمل هو /bar/jar
.
إذا كنت تريد المسار الجذر حيث توجد جرة، فستكون إحدى الطرق:
File root = new File(Thread.currentThread().getContextClassLoader().getResource("").toURI());
يؤدي هذا إلى إرجاع مسار الجذر لملف JAR (IOW Root ClassPath). إذا وضعت موردك بالنسبة إلى جذر ClassPath، يمكنك الوصول إليه على النحو التالي:
File resource = new File(root, "filename.ext");
بدلا من ذلك، يمكنك أيضا استخدام:
File resource = new File(Thread.currentThread().getContextClassLoader().getResource("filename.ext").toURI());
أعتقد أن هذا يجب أن يفعل الخدعة:
File starting = new File(System.getProperty("user.dir"));
File fileToBeRead = new File(starting,"my_file.txt");
بهذه الطريقة، سيتم البحث في الملف في user.dir
الممتلكات، والتي ستكون دليل عمل التطبيق الخاص بك.
هل تسأل عن مشاكل شخصيات الهروب؟
إذا كان هذا هو الحال، فعندئذ استخدام خطوط مائلة إلى الأمام بدلا من الخط المتخلف
"C: / Users/you/desktop/test.txt"
بدلا من
"C: المستخدمين you desktop test.txt"
يمكنك أن تطلب من كدروكم أن يعطيك موقع الجرة:
getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
... لكنني أقترح وضع الملف الذي تبحث عنه داخل ملف جرة الخاص بك وقراءته كمورد (getClass().getResourceAsStream( "myFile.txt" )
).