جافا: كيفية معرفة ما إذا كان مسار مطلق بغض النظر عن نظام التشغيل

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

  •  06-07-2019
  •  | 
  •  

سؤال

وهناك على أية حال في جافا لمعرفة ما إذا كان مسار معين هو المطلق أم لا بغض النظر عن منصة هو البرنامج قيد التشغيل حاليا. لذا، ما أريده هو ربما شيء من هذا القبيل المثال التالي:

في لينكس:

new File("/home/").isAbsolute() // Should return true.
new File("C:/My Documents").isAbsolute() // Should *also* return true.

في ويندوز:

new File("C:/Documents").isAbsolute() // Should return true.
new File("/home/").isAbsolute() // Should *also* return true.

ويمكنني ربما كود شيء للالتفاف مع هذا، ولكن أردت فقط لمعرفة ما إذا كانوا يعرفون أي شخص المدمج في الدرجة المنصوص عليها في جافا على حل هذه المشكلة. أو لديه أي شخص من أي وقت مضى تأتي هذه المشكلة؟ وكيف حلها؟

وشكرا!

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

المحلول

وكلا.

وهناك بعض نظام الملفات الطبقات الأساسية (وهذا جافا 7، ولكن وجدت قبل لأنها كذلك) التي تعرض isAbsolute ()، لكنها ليست العام - حتى تتمكن <م> لا ينبغي استخدامها، وحتى لو فعلت التعليمات البرمجية الخاصة بك سوف تكون كاملة من غير المرغوب فيه انعكاس - وتدرج سوى "الصحيحة" منها OS في JRE، لذلك عليك أن رمز من حولهم على أي حال.

وهنا هي جافا 7 تطبيقات isAbsolute (...) للحصول على انك بدأته. لاحظ أن File.getPrefixLength () هو حزمة خاصة.

Win32FileSystem :

public boolean isAbsolute(File f) 
{
        int pl = f.getPrefixLength();
        return (((pl == 2) && (f.getPath().charAt(0) == slash))
                || (pl == 3));
}

UnixFileSystem :

public boolean isAbsolute(File f) 
{
        return (f.getPrefixLength() != 0);
}

نصائح أخرى

في جافا 7:

new File(path).isAbsolute()

وبلدي صدع في ذلك باستخدام أباتشي FilenameUtil -

   public static boolean isAbsolute(final String path) {
      return FilenameUtils.getPrefixLength(path) != 0;
   }

وتقنيا هذا يعود! قريب. وهذا أمر جيد لأغراض بلدي.

وانتهى بي الأمر باستخدام هذا (في جاوة 6):

private static boolean testPath(String path) {
    int prefixLen = FilenameUtils.getPrefixLength(path);
    if (testPathWin(path, prefixLen) || testPathLinux(prefixLen))
        return true;
    else
        return false;
}

private static boolean testPathWin(String path, int prefixLen) {
    if (prefixLen == 3)
        return true;
    File f = new File(path);
    if ((prefixLen == 2) && (f.getPath().charAt(0) == '/'))
        return true;
    return false;
}

private static boolean testPathLinux(int prefixLen) {
    return (prefixLen != 0);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top