ความแตกต่างระหว่าง Resource, URI, URL, Path และ File ใน Java คืออะไร?


96

ตอนนี้ฉันกำลังดูโค้ด Java ชิ้นหนึ่งและใช้เส้นทางเป็น String และรับ URL โดยใช้ URL resource = ClassLoader.getSystemClassLoader().getResource(pathAsString);จากนั้นจึงเรียกString path = resource.getPath()ใช้new File(path);และในที่สุดก็รัน

โอ้และยังมีการโทรไปยัง URL url = resource.toURI();และString file = resource.getFile()และ

ตอนนี้ฉันสับสนไปหมด - ส่วนใหญ่เป็นเพราะคำศัพท์ฉันเดา ใครช่วยแนะนำความแตกต่างให้ฉันหน่อยได้ไหมหรือให้ลิงค์ไปยังวัสดุป้องกันดัมมี่ โดยเฉพาะ URI ไปยัง URL และResource to File ? สำหรับฉันแล้วรู้สึกว่าพวกเขาควรจะเป็นสิ่งเดียวกันตามลำดับ ...

ความแตกต่างระหว่างgetFile()และgetPath()อธิบายได้ที่นี่: url.getFile () และ getpath () ต่างกันอย่างไร (ที่น่าสนใจคือทั้งคู่ดูเหมือนจะส่งคืน Strings ซึ่งอาจจะเพิ่มสภาพจิตใจของฉันได้มาก ... )

ตอนนี้ถ้าฉันมีตัวระบุตำแหน่งที่อ้างอิงคลาสหรือแพ็คเกจในไฟล์ jar ทั้งสอง (เช่นพา ธ สตริงไฟล์) จะแตกต่างกันหรือไม่

resource.toString()จะให้คุณjar:file:/C:/path/to/my.jar!/com/example/หลังจากทั้งหมด (สังเกตเครื่องหมายอัศเจรีย์)

ความแตกต่างระหว่างURIและURL ใน Javaที่อดีตไม่เข้ารหัสช่องว่างหรือไม่? Cf. ไฟล์ URI และ URL ที่ขัดแย้งกันใน Java (คำตอบนี้อธิบายความแตกต่างเชิงแนวคิดทั่วไประหว่างคำศัพท์ทั้งสองได้ค่อนข้างดี: URI ระบุและค้นหา URL )

สุดท้าย - และที่สำคัญที่สุด - ทำไมฉันถึงต้องการFileวัตถุ เหตุใดทรัพยากร ( URL) จึงไม่เพียงพอ (และมีวัตถุทรัพยากรหรือไม่)

ขออภัยหากคำถามนี้ไม่เป็นระเบียบ มันสะท้อนถึงความสับสนที่ฉันมี ... :)


5
และคุณยังไม่ได้เริ่มดูPathและ FileSystem จาก NIO :)
เช่น

2
@eckes ปวดหัวทีละครั้งได้โปรด ;)
คริสเตียน

1
ในบริบทของคำถามของคุณไฟล์ / URL + URI ไม่เกี่ยวข้องกัน วิธีหนึ่งคือค่าเฉลี่ยในการตั้งชื่อและดำเนินการกับไฟล์อีกวิธีหนึ่งคือวิธีการตั้งชื่อและอ่านจากทรัพยากร (ซึ่งอาจเป็นไฟล์) เมธอด getFile และ getPath จัดการกับคอมโพเนนต์ของ URL ซึ่งมีชื่อ (สับสน) เหมือนอ็อบเจ็กต์ไฟล์ ทรัพยากร Classloader จะไม่แสดงเป็นไฟล์เนื่องจากอาจมีต้นกำเนิดที่แตกต่างกัน (หรือซ้อนกันในไฟล์ JAR)
eckes

1
ฉันทราบว่ารหัสนี้ไม่น่าจะทำงานได้ตามที่ตั้งใจไว้ A URLเป็นแบบทึบ - อย่างที่คุณแสดงjar:file:นั่นคือทรัพยากรใน.jarไฟล์เก็บถาวร การตีสิ่งนั้นให้Fileเป็นไปได้ยากมากที่จะส่งผลให้เกิดประโยชน์อะไร
Boris the Spider

1
หัวใจของปัญหาคือทรัพยากรคำและเส้นทางอาจมีความหมายที่แตกต่างกันขึ้นอยู่กับบริบท
Raedwald

คำตอบ:


43

อัปเดต 2017-04-12ตรวจสอบคำตอบของ JvRเนื่องจากมีคำอธิบายที่ละเอียดถี่ถ้วนและตรงประเด็นกว่า!


โปรดทราบว่าฉันไม่ได้คิดว่าตัวเองมีความสามารถ 100% ที่จะตอบ แต่อย่างไรก็ตามนี่คือความคิดเห็นบางส่วน:

  • File แสดงถึงไฟล์หรือไดเร็กทอรีที่เข้าถึงได้ผ่านระบบไฟล์
  • ทรัพยากรเป็นคำทั่วไปสำหรับออบเจ็กต์ข้อมูลซึ่งแอปพลิเคชันสามารถโหลดได้
    • โดยทั่วไปทรัพยากรคือไฟล์ที่แจกจ่ายด้วยแอปพลิเคชัน / ไลบรารีและโหลดผ่านกลไกการโหลดคลาส (เมื่ออยู่บนคลาสพา ธ )
  • URL#getPathได้รับในส่วนเส้นทางของ URL ( protocol://host/path?query)
  • URL#getFile ตามผลตอบแทนของ JavaDoc path+query

ใน Java URIเป็นเพียงโครงสร้างข้อมูลสำหรับจัดการตัวระบุทั่วไปเท่านั้น

URLในทางกลับกันเป็นตัวระบุตำแหน่งทรัพยากรและมีคุณสมบัติในการอ่านทรัพยากรจริงผ่านทางURLStreamHandlers ที่ลงทะเบียน

URL สามารถนำไปสู่ทรัพยากรระบบไฟล์และคุณสามารถสร้าง URL สำหรับทรัพยากรระบบไฟล์ทั้งหมดโดยใช้file://โปรโตคอล (ดังนั้นความสัมพันธ์File<-> URL)

นอกจากนี้ยังทราบว่าที่ไม่เกี่ยวข้องกับURL#getFilejava.io.File


ทำไมฉันถึงต้องการ File object; เหตุใดทรัพยากร (URL) จึงไม่เพียงพอ

ก็เพียงพอแล้ว เฉพาะในกรณีที่คุณต้องการส่งต่อทรัพยากรไปยังส่วนประกอบบางอย่างซึ่งสามารถใช้ได้กับไฟล์เท่านั้นคุณจะต้องได้รับFileจากมัน อย่างไรก็ตาม URL ทรัพยากรบางรายการไม่สามารถแปลงเป็นFiles ได้

และมีวัตถุทรัพยากรหรือไม่?

จากมุมมองของ JRE มันเป็นเพียงคำศัพท์ เฟรมเวิร์กบางอย่างมีคลาสดังกล่าวให้คุณ (เช่นSpring's Resource )


5
นอกจากนี้ยังjava.nio.file.Pathมีการแทนที่ (Java 7+) โดยทั่วไปjava.io.Fileเนื่องจาก API รุ่นหลังเห็นได้ชัดว่าไม่ค่อยดีนักในช่วงแรก ๆ ของ Java
ntoskrnl

1
โดยทั่วไปคุณควรลดการใช้ URL ให้น้อยที่สุดเว้นแต่ว่าจำเป็นจริงๆ เหตุผลก็คือเมธอดเท่ากับและhashCodeของ URL ถูกนำไปใช้ในรูปแบบที่น่าแปลกใจนั่นคือพวกมันกำลังบล็อกการเรียกเมธอด
kibibyte

3
@kibibyte: ฉันคาดหวังว่าการโทรจะถูกบล็อกเพื่อให้มีการใช้งานแฮชโค้ดแบบอะซิงโครนัสและเท่ากับว่าตอนนี้จะไม่มั่นคงมาก ฉันคิดว่าสิ่งที่คุณหมายถึงคือการโทรจะพยายามแก้ไขโฮสต์เพื่อค้นหาว่ามีค่าเท่ากันหรือไม่และอาจทำให้บล็อกการโทรในเครือข่ายได้
Newtopian

55

ตอนนี้ฉันสับสนไปหมด - ส่วนใหญ่เป็นเพราะคำศัพท์ฉันเดา ใครช่วยแนะนำฉันเกี่ยวกับความแตกต่างหรือให้ลิงค์ไปยังวัสดุป้องกันดัมมี่ได้บ้าง โดยเฉพาะ URI เป็น URL และ Resource to File? สำหรับฉันแล้วรู้สึกว่าพวกเขาควรจะเป็นสิ่งเดียวกันตามลำดับ ...

คำศัพท์มีความสับสนและบางครั้งก็ทำให้สับสนและส่วนใหญ่เกิดจากวิวัฒนาการของ Java ทั้งในรูปแบบ API และเป็นแพลตฟอร์มเมื่อเวลาผ่านไป เพื่อให้เข้าใจว่าคำศัพท์เหล่านี้มีความหมายอย่างไรสิ่งสำคัญคือต้องตระหนักถึงสองสิ่งที่มีอิทธิพลต่อการออกแบบของ Java:

  • ความเข้ากันได้ย้อนหลัง แอปพลิเคชันเก่าควรทำงานบนการติดตั้งที่ใหม่กว่าโดยไม่ต้องแก้ไข ซึ่งหมายความว่า API เก่า (พร้อมชื่อและคำศัพท์) จะต้องได้รับการดูแลผ่านเวอร์ชันที่ใหม่กว่าทั้งหมด
  • ข้ามแพลตฟอร์ม API ควรให้สิ่งที่เป็นนามธรรมที่ใช้งานได้ของแพลตฟอร์มพื้นฐานไม่ว่าจะเป็นระบบปฏิบัติการหรือเบราว์เซอร์

ฉันจะอธิบายแนวคิดและความเป็นมาของพวกเขา ฉันจะตอบคำถามอื่น ๆ ของคุณหลังจากนั้นเพราะฉันอาจต้องอ้างถึงบางสิ่งในส่วนแรก

"ทรัพยากร" คืออะไร?

ข้อมูลทั่วไปที่เป็นนามธรรมซึ่งสามารถระบุและอ่านได้ กล่าวอย่างหลวม ๆ Java ใช้สิ่งนี้เพื่ออ้างถึง "ไฟล์" ที่อาจไม่ใช่ไฟล์ แต่เป็นตัวแทนของข้อมูลที่มีชื่อ ไม่มีการแสดงคลาสโดยตรงหรืออินเทอร์เฟซใน Javaแต่เนื่องจากคุณสมบัติ (ระบุตำแหน่งได้, อ่านได้) จึงมักแสดงด้วย URL

เนื่องจากเป้าหมายการออกแบบแรกเริ่มของ Java คือการทำงานภายในเบราว์เซอร์เป็นแอปพลิเคชันแซนด์บ็อกซ์ (แอพเพล็ต!) ที่มีสิทธิ์ / สิทธิ์ / การรักษาความปลอดภัยที่ จำกัด มากJava จึงสร้างความแตกต่างที่ชัดเจน (ทางทฤษฎี) ระหว่างไฟล์ (บางอย่างในโลคัล ระบบไฟล์) และทรัพยากร (สิ่งที่ต้องอ่าน) นี่คือเหตุผลที่การอ่านบางสิ่งที่เกี่ยวข้องกับแอปพลิเคชัน (ไอคอนไฟล์คลาสและอื่น ๆ ) เสร็จสิ้นClassLoader.getResourceและไม่ผ่านคลาสไฟล์

น่าเสียดายเนื่องจาก "ทรัพยากร" เป็นคำทั่วไปที่มีประโยชน์นอกเหนือจากการตีความนี้จึงยังใช้เพื่อตั้งชื่อสิ่งที่เฉพาะเจาะจงมาก (เช่นคลาสResourceBundle , UIResource , Resource ) ที่ไม่ใช่ทรัพยากรในแง่นี้

คลาสหลักที่แสดง (เส้นทางไปยัง) ทรัพยากรคือjava.nio.file.Path , java.io.File , java.net.URIและjava.net.URL java.net.URL

ไฟล์ (java.io, 1.0)

การแสดงนามธรรมของชื่อพา ธ ไฟล์และไดเร็กทอรี

ชั้นไฟล์หมายถึงทรัพยากรที่เป็นความสามารถเข้าถึงได้ผ่านระบบไฟล์แพลตฟอร์มพื้นเมือง มันมีเฉพาะชื่อของไฟล์ดังนั้นจึงเป็นพา ธ จริงๆ (ดูในภายหลัง) ที่แพลตฟอร์มโฮสต์ตีความตามการตั้งค่ากฎและไวยากรณ์ของมันเอง

โปรดทราบว่าไฟล์ไม่จำเป็นต้องชี้ไปที่สิ่งที่อยู่ในเครื่องเพียงแค่สิ่งที่แพลตฟอร์มโฮสต์เข้าใจในบริบทของการเข้าถึงไฟล์เช่นเส้นทาง UNC ใน Windows หากคุณติดตั้งไฟล์ ZIP เป็นระบบไฟล์ในระบบปฏิบัติการของคุณไฟล์จะอ่านรายการที่มีอยู่ได้ดี

URL (java.net, 1.0)

Class URL แสดงถึง Uniform Resource Locator ซึ่งเป็นตัวชี้ไปยัง "ทรัพยากร" บนเวิลด์ไวด์เว็บ ทรัพยากรอาจเป็นสิ่งที่เรียบง่ายเหมือนไฟล์หรือไดเร็กทอรีหรืออาจเป็นการอ้างอิงถึงออบเจ็กต์ที่ซับซ้อนมากขึ้นเช่นแบบสอบถามไปยังฐานข้อมูลหรือไปยังเครื่องมือค้นหา

ควบคู่ไปกับแนวคิดของทรัพยากร URL แสดงถึงทรัพยากรนั้นในลักษณะเดียวกับที่คลาส File แสดงถึงไฟล์ในแพลตฟอร์มโฮสต์: เป็นสตริงที่มีโครงสร้างซึ่งชี้ไปยังทรัพยากร นอกจากนี้ URL ยังมีรูปแบบที่บอกถึงวิธีการเข้าถึงทรัพยากร (โดยมี "file:" being "ask the host platform") และอนุญาตให้ชี้ไปที่ทรัพยากรผ่าน HTTP, FTP, ภายใน JAR และอะไรก็ได้

ขออภัย URL มาพร้อมกับไวยากรณ์และคำศัพท์เฉพาะของตนเองรวมถึงการใช้ "file" และ "path" ในกรณีที่ URL เป็น URL ของไฟล์ URL.getFile จะส่งคืนสตริงที่เหมือนกับสตริงพา ธ ของไฟล์ที่อ้างอิง

Class.getResource ส่งคืน URL: มีความยืดหยุ่นมากกว่าการส่งคืนไฟล์และตอบสนองความต้องการของระบบตามที่จินตนาการไว้ในช่วงต้นทศวรรษ 1990

URI (java.net, 1.4)

แสดงการอ้างอิง Uniform Resource Identifier (URI)

URI เป็นนามธรรม (เล็กน้อย) เหนือ URL ความแตกต่างระหว่าง URI และ URL เป็นแนวคิดและส่วนใหญ่เป็นเชิงวิชาการ แต่ URI มีความหมายที่เป็นทางการได้ดีกว่าและครอบคลุมกรณีการใช้งานที่หลากหลายกว่า เนื่องจาก URL และ URI ไม่ใช่สิ่งเดียวกันจึงมีการนำคลาสใหม่มาใช้แทนโดยมีเมธอด URI.toURL และ URL.toURI เพื่อย้ายไปมาระหว่างหนึ่งและอีกอัน

ใน Java ข้อแตกต่างที่สำคัญระหว่าง URL และ URI คือURL มีความคาดหวังว่าจะสามารถแก้ไขได้บางสิ่งที่แอปพลิเคชันอาจต้องการ InputStream จาก URI ได้รับการปฏิบัติเหมือนสิ่งนามธรรมมากกว่า amajig ที่อาจชี้ไปที่บางสิ่งที่แก้ไขได้ (และมักจะทำได้) แต่ความหมายและวิธีการเข้าถึงนั้นเปิดกว้างต่อบริบทและการตีความมากกว่า

เส้นทาง (java.nio.file, 1.7)

อ็อบเจ็กต์ที่อาจใช้เพื่อค้นหาไฟล์ในระบบไฟล์ โดยทั่วไปจะแสดงเส้นทางไฟล์ที่ขึ้นกับระบบ

API ไฟล์ใหม่ซึ่งเป็นสัญลักษณ์ในอินเทอร์เฟซ Path ช่วยให้มีความยืดหยุ่นมากกว่าที่คลาส File จะมีให้ อินเตอร์เฟซที่เส้นทางเป็นนามธรรมของคลาแฟ้มและเป็นส่วนหนึ่งของใหม่ IO ไฟล์ API โดยที่ File จำเป็นต้องชี้ไปที่ "ไฟล์" ตามที่แพลตฟอร์มโฮสต์เข้าใจ Path นั้นเป็นแบบทั่วไปมากกว่า: แสดงถึงไฟล์ (ทรัพยากร) ในระบบไฟล์โดยพลการ

พา ธ นำไปใช้กับแนวคิดของแพลตฟอร์มโฮสต์ของไฟล์ อาจเป็นรายการในไฟล์ ZIP ไฟล์ที่เข้าถึงได้ผ่าน FTP หรือ SSH-FS การแสดงคลาสพา ธ ของแอปพลิเคชันหลายรูทหรืออะไรก็ได้ที่สามารถแสดงความหมายผ่านอินเทอร์เฟซ FileSystem และไดรเวอร์ FileSystemProvider นำพลังของระบบไฟล์ "การติดตั้ง" เข้ามาในบริบทของแอ็พพลิเคชัน Java

แพลตฟอร์มโฮสต์แสดงผ่าน "ระบบไฟล์เริ่มต้น"; เมื่อคุณโทรFile.toPathคุณจะได้รับ Path บนระบบไฟล์เริ่มต้น


ตอนนี้ถ้าฉันมีตัวระบุตำแหน่งที่อ้างอิงคลาสหรือแพ็คเกจในไฟล์ jar ทั้งสอง (เช่นพา ธ สตริงไฟล์) จะแตกต่างกันหรือไม่

ไม่น่าเป็นไปได้ หากไฟล์ jar อยู่ในระบบไฟล์ภายในเครื่องคุณไม่ควรมีคอมโพเนนต์เคียวรีดังนั้นURL.getPathและURL.getFileควรส่งคืนผลลัพธ์เดียวกัน อย่างไรก็ตามเลือกสิ่งที่คุณต้องการ: โดยทั่วไปแล้ว URL ของไฟล์อาจไม่มีส่วนประกอบการสืบค้น แต่ฉันสามารถเพิ่มได้อย่างแน่นอน

สุดท้าย - และที่สำคัญที่สุด - ทำไมฉันถึงต้องการ File object; เหตุใดทรัพยากร (URL) จึงไม่เพียงพอ

URL อาจไม่เพียงพอเนื่องจาก File ให้คุณเข้าถึงข้อมูลการดูแลระบบเช่นสิทธิ์ (อ่านได้เขียนได้ปฏิบัติการได้) ประเภทไฟล์ (ฉันเป็นไดเร็กทอรีหรือไม่) และความสามารถในการค้นหาและจัดการระบบไฟล์ภายในเครื่อง หากเป็นคุณสมบัติที่คุณต้องการไฟล์หรือเส้นทางจะจัดเตรียมให้

คุณไม่จำเป็นต้องใช้ไฟล์หากคุณสามารถเข้าถึงเส้นทางได้ API รุ่นเก่าบางตัวอาจต้องการไฟล์

(และมีวัตถุทรัพยากรหรือไม่)

ไม่มีไม่มี มีหลายสิ่งที่ชื่อเหมือนมันมี ClassLoader.getResourceแต่พวกเขาไม่ได้เป็นทรัพยากรในแง่ของการเป็น


ว้าวละเอียดมาก เพิ่งจะผ่านไป แต่มีคำถามติดตามผลแรกอยู่แล้ว: เมื่อคุณพูดว่าไฟล์ "มี แต่ชื่อไฟล์" คุณอย่าขัดแย้งกับคำกล่าวเริ่มต้นของคุณที่ว่าเป็น "การแสดงชื่อพา ธ ของไฟล์และไดเร็กทอรีแบบนามธรรม" - ไอมอร์?
Christian

1
@Christian ฉันหมายถึง "เฉพาะชื่อ" เหมือนใน: ไม่ได้จำลองเนื้อหาของไฟล์ในทางใดทางหนึ่ง มันเป็นเพียงกระดาษห่อบาง ๆ รอบ ๆ เชือก ส่วน "การแสดงนามธรรม" ถูกยกมาจากเอกสาร API ;)
JvR

คำตอบนี้สมควรได้รับการโหวตมากขึ้น ... จะอัปเดตคำตอบที่ยอมรับของฉันเพื่อชี้ให้ผู้อ่านทราบถึงคำตอบนี้
Pavel Horal

12

คำตอบของ Pavel Horalนั้นดี

ในขณะที่เขากล่าวว่าคำว่า "แฟ้ม" มีต่างกันโดยสิ้นเชิง (ไม่เกี่ยวข้องจริง) ความหมายในURL#getFileVS java.io.File - นั่นอาจเป็นส่วนหนึ่งของความสับสน

เพียงเพื่อเพิ่ม:

  • ทรัพยากรใน Java เป็นแนวคิดนามธรรมแหล่งที่มาของข้อมูลที่สามารถอ่าน ตำแหน่ง (หรือแอดเดรส) ของรีซอร์สถูกแสดงใน Java โดยURLอ็อบเจ็กต์

  • ทรัพยากรสามารถสอดคล้องกับแฟ้มปกติในระบบแฟ้มท้องถิ่น (โดยเฉพาะเมื่อมันURLเริ่มต้นด้วยfile://) แต่ทรัพยากรมีความกว้างมากกว่า (อาจเป็นไฟล์บางไฟล์ที่เก็บไว้ใน jar หรือข้อมูลบางอย่างที่จะอ่านจากเครือข่ายหรือจากหน่วยความจำหรือ ... ) นอกจากนี้ยังมีข้อ จำกัด มากขึ้นเนื่องจากFile(นอกเหนือจากไฟล์ปกติ: ไดเร็กทอรีลิงก์) ยังสามารถสร้างและเขียนข้อมูลได้

  • โปรดจำไว้ว่าใน Java Fileวัตถุไม่ได้แสดงถึง "ไฟล์" แต่เป็นตำแหน่ง (ชื่อเต็มพร้อมเส้นทาง) ของไฟล์ ดังนั้นFileวัตถุช่วยให้คุณค้นหา (และเปิด) ไฟล์เนื่องจากURLอนุญาตให้คุณเข้าถึง (และเปิด) ทรัพยากร (ไม่มีResourceคลาสใน Java ที่จะแสดงทรัพยากร แต่ก็ไม่มีคลาสที่ใช้แทนไฟล์! อีกครั้ง: Fileไม่ใช่ไฟล์ แต่เป็นพา ธ ของไฟล์)


3

ตามที่ฉันเข้าใจคุณสามารถจัดหมวดหมู่ได้ดังนี้:

ตามเว็บ: URI และ URL

  • URL: URL คือตำแหน่งที่แน่นอนบนอินเตอร์เนต (เป็นเพียงที่อยู่เว็บธรรมดาเช่น - stackoverflow.com)
  • URI: Ever URL คือ URI แต่ URI ยังสามารถมีสิ่งต่างๆเช่น "mailto:" ได้ด้วยเช่นกันฉันจะพูดว่า "script" คืออะไร

และโลคัล: ทรัพยากรเส้นทางและไฟล์

  • ทรัพยากร: ทรัพยากรคือไฟล์ที่อยู่ในโถของคุณ ใช้เพื่อโหลดไฟล์จากไห / คอนเทนเนอร์
  • เส้นทาง: โดยทั่วไปเส้นทางเป็นสตริง แต่มันมาพร้อมกับฟังก์ชั่นที่มีประโยชน์บางอย่างในการเชื่อมต่อสตริงหลาย ๆ สตริงหรือเพิ่มไฟล์ลงในสตริง ตรวจสอบให้แน่ใจว่าเส้นทางที่คุณสร้างนั้นถูกต้อง
  • ไฟล์: เป็นการอ้างอิงถึงไดเร็กทอรีหรือไฟล์ ใช้เพื่อแก้ไขไฟล์เปิดและอื่น ๆ

มันจะง่ายกว่าถ้าพวกเขาจะรวมเป็นคลาสเดียว - พวกเขาสับสนจริงๆ: D

ฉันหวังว่านี่จะช่วยคุณได้ :)

(ฉันเพิ่งดูเอกสาร - ดูที่ docs.oracle.com)


0

ไฟล์เป็นการแสดงนามธรรมของเอนทิตีในระบบไฟล์ภายใน

โดยทั่วไปเส้นทางคือสตริงที่ระบุตำแหน่งของไฟล์ภายในระบบไฟล์ โดยปกติจะไม่รวมชื่อไฟล์ ดังนั้น c: \ document \ mystuff \ stuff.txt จะมีพา ธ ที่มีค่าเป็น "C: \ documents \ mystuff" แน่นอนว่ารูปแบบของชื่อไฟล์และพา ธ สัมบูรณ์จะแตกต่างกันอย่างมากในแต่ละระบบไฟล์ไปจนถึงระบบไฟล์

URL คือชุดข้อมูลย่อยของ URI ที่มักจะแสดงถึงทรัพยากรที่เข้าถึงได้ผ่าน http ฉันไม่คิดว่าจะมีกฎเหล็กเกี่ยวกับเวลาที่บางสิ่งต้องเป็น URI เทียบกับ URL URI คือสตริงในรูปแบบของ "protocol: // resource-identifier" เช่น bitcoin: // params, http://something.com?param=value http://something.com?param=valueคลาสเช่น URL โดยทั่วไปจะห่อสตริงและระบุวิธีการยูทิลิตี้ที่ String จะไม่มีเหตุผลในการจัดหา

ไม่มีสิ่งที่เรียกว่าทรัพยากรอย่างน้อยก็ไม่ใช่ในแง่ที่คุณกำลังพูดถึง เพียงเพราะเมธอดชื่อ getResource ไม่ได้หมายความว่าจะส่งคืนอ็อบเจ็กต์ประเภท Resource

ในที่สุดวิธีที่ดีที่สุดในการค้นหาว่าเมธอดของคลาสทำอะไรคือการสร้างอินสแตนซ์ของมันในโค้ดของคุณเรียกใช้เมธอดจากนั้นขั้นตอนในโหมดดีบักหรือส่งผลลัพธ์ไปที่ System.out


คำจำกัดความ "เส้นทาง" ของคุณไม่ตรงกับแนวคิดของ "เส้นทาง" ในบริบท OP
leonbloy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.