سؤال

لقد أنشأت تطبيق 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" )).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top