บทความนี้อธิบายวิธีการรับเส้นทางที่แน่นอนของไฟล์โดย Java แบ่งปันสำหรับการอ้างอิงของคุณ วิธีการใช้งานเฉพาะมีดังนี้:
คัดลอกรหัสดังนี้:/**
* รับเส้นทางสัมบูรณ์ที่ไฟล์คลาสของคลาสอยู่ คลาสนี้สามารถเป็นคลาสของ JDK เองคลาสที่ผู้ใช้กำหนดหรือคลาสในแพ็คเกจการพัฒนาของบุคคลที่สาม
* ตราบใดที่มันเป็นคลาสที่สามารถโหลดได้ในโปรแกรมนี้ก็สามารถอยู่ในเส้นทางที่แน่นอนของไฟล์คลาส
-
* @param cls
* แอตทริบิวต์คลาสของวัตถุ
* @return เส้นทางสัมบูรณ์ไปยังตำแหน่งไฟล์คลาสของคลาสนี้ หากไม่มีคำจำกัดความสำหรับคลาสนี้ NULL จะถูกส่งคืน
-
สตริงส่วนตัว getPathFromClass (คลาส CLS) พ่น IOException {
เส้นทางสตริง = null;
if (cls == null) {
โยน nullpointerexception ใหม่ ();
-
url url = getClassLocationUrl (CLS);
if (url! = null) {
path = url.getPath ();
if ("jar" .equalsignorecase (url.getProtocol ())) {
พยายาม {
path = url ใหม่ (เส้นทาง) .getPath ();
-
จับ (Malformedurlexception e) {
-
int location = path.indexof ("!/");
ถ้า (ตำแหน่ง! = -1) {
path = path.substring (0, ตำแหน่ง);
-
-
ไฟล์ไฟล์ = ไฟล์ใหม่ (path.replaceall ("%20", ""));
path = file.getCanonicalPath ();
-
เส้นทางกลับ;
-
-
* รับ URL ของตำแหน่งไฟล์คลาส วิธีนี้เป็นวิธีพื้นฐานที่สุดของคลาสนี้และเป็นวิธีการอื่นในการโทร
-
URL ส่วนตัว getClassLocationUrl (คลาสสุดท้าย CLS) {
if (cls == null) {
โยน unlegalargumentException ใหม่ ("คลาสที่ป้อนข้อมูลเป็นโมฆะ");
-
URL ผลลัพธ์ = null;
สตริงสุดท้าย clsasresource = cls.getName (). แทนที่ ('.', '/').concat(".class ");
ProtectionDomain สุดท้าย PD = Cls.GetProtectionDomain ();
ถ้า (pd! = null) {
รหัสสุดท้าย CS = pd.getCodeSource ();
ถ้า (cs! = null) {
ผลลัพธ์ = cs.getLocation ();
-
ถ้า (ผลลัพธ์! = null) {
if ("ไฟล์" .equals (result.get.getProtocol ())) {
พยายาม {
if (result.toexternalform (). endswith (". jar") || result.toexternalform (). endswith (". zip")) {.
ผลลัพธ์ = url ใหม่ ("jar:". concat (result.toexternalform ()). concat ("!/"). concat (clsasresource));
-
อื่นถ้า (ไฟล์ใหม่ (result.getFile ()). isDirectory ()) {
ผลลัพธ์ = url ใหม่ (ผลลัพธ์, clsasresource);
-
-
Catch (Malformedurlexception ละเว้น) {
-
-
-
-
if (result == null) {
classloader สุดท้าย clsloader = cls.getClassLoader ();
result = clsloader! = null?
-
ผลตอบแทน;
-
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน