ส่งไฟล์โลคัลไปที่ URL ใน Java


175

ฉันจะสร้างURLวัตถุใหม่โดยใช้ไฟล์โลคัลเพื่อจุดประสงค์ในการทดสอบหน่วยได้อย่างไร

คำตอบ:



46

ใช้ Java 7:

Paths.get(string).toUri().toURL();

URIแต่คุณอาจต้องการที่จะได้รับ เช่น a URIเริ่มต้นด้วยfile:///แต่ URL ที่มีfile:/(อย่างน้อยนั่นคือสิ่งที่toStringสร้างขึ้น)


"... URI เริ่มต้นด้วยไฟล์: /// แต่ URL ที่มีไฟล์: / ... " เป็นกรณีสำหรับ Windows และ Linux หรือไม่
ptntialunrlsd

@ptntialunrlsd นั่นเป็นคำถามที่ดี ฉันไม่ได้ตรวจสอบ แต่ฉันเดาว่าใช่
Aleksandr Dubinsky

7
ไม่ได้ URL เป็นเพียงกรณีพิเศษของ URI ไฟล์ URI เริ่มต้นด้วย "file: //" จากนั้นแสดงรายการโฮสต์ (ละเว้นโดยทั่วไป) ตามด้วย "/" และเส้นทาง "foo / bar" (โดยทั่วไปหมายถึงการอ่านเป็นเส้นทางที่แน่นอน) ดังนั้น "file: /// foo / var" URI ที่ดูเหมือน "ไฟล์: / foo / bar" ไม่ถูกต้อง ดูเพิ่มเติม: รูปแบบไฟล์ URI
David Tonhofer

@DavidTonhofer ขอบคุณสำหรับคำอธิบายของยูริ แต่ที่ไม่ได้คำตอบptntialunrlsd 'คำถาม '... toURL (). toString ()' ผลิตบน Linux คืออะไร นอกจากนี้ฉันได้เปลี่ยนกลับการแก้ไขของคุณเพราะพวกเขาทำให้ฉันตอบมากขึ้นโดยไม่ต้องเปลี่ยนความหมาย
Aleksandr Dubinsky

3
@AleksandrDubinsky ดีที่สุดที่จะชี้ไปที่ลา Javadoc Oracle ในการแม้ว่า .. java.nio.file.Pathsง่ายต่อการคลิกผ่านไป นอกจากนี้โปรดอย่าลืมระบุว่าคุณหมายถึงการใช้งานใน "URI กับ URL" Anway java.net.URL.toString()ผลิตสิ่งเดียวกันใน Unix ตามที่มันต้องการ จะแสดงเพียงหนึ่ง "/" ซึ่งผิดมาก (ดูรูปแบบไฟล์ URI ) ผมคิดว่านี้คือใน Java เพราะเหตุผล, java.net.URIใช้ดีกว่า ได้อย่างถูกต้องสร้าง "file: // [โฮสต์] /" .toString()ในการเรียกไปยัง
David Tonhofer


21
new URL("file:///your/file/here")

1
โดยที่/your/file/hereเป็นพา ธ สัมบูรณ์ไปยังไฟล์บน Unix / Linux บน Windows มันจะแตกต่างกันฉันคิดว่า
Robin Green

5
มันไม่ค่อยฉลาดนักเนื่องจากคุณต้องจัดการกับการหลบหนีของตัวละครที่ไม่ได้รับอนุญาตใน URL ด้วยตัวคุณเอง บน Windows (และระบบปฏิบัติการอื่น ๆ ที่อาจเกิดขึ้น) คุณต้องแก้ไขตัวคั่นพา ธ จากพา ธ ดั้งเดิมไปยังไฟล์
jarnbjo

new URL("file:my.properties");
weberjn

ขณะนี้ถูกต้องมันไม่สามารถพกพาได้เนื่องจากขึ้นอยู่กับเส้นทางที่แน่นอน
mazunki


5

ดูที่นี่สำหรับไวยากรณ์ทั้งหมด: http://en.wikipedia.org/wiki/File_URI_scheme สำหรับระบบที่เหมือนยูนิกซ์มันจะเป็น @Alex ที่กล่าวfile:///your/file/hereในขณะที่ระบบ Windows จะเป็นfile:///c|/path/to/file


7
อย่าทำแบบนั้นด้วยตนเอง File.toURI().toURL()เป็นวิธีที่จะไป
ฌอนแพทริคฟลอยด์

3
@SeanPatrickFloyd บางครั้งคุณไม่มีทางเลือกเช่นเมื่ออยู่ใน.propertiesไฟล์
เลื่อน

@ArtB ฉันไม่เห็นว่ามันสร้างความแตกต่างได้อย่างไร
Sean Patrick Floyd

2
@SeanPatrickFloyd คำถาม / คำตอบนี้เกิดขึ้นเมื่อคุณค้นหาjava file urlซึ่งในกรณีของฉันหมายความว่าฉันกำลังค้นหารูปแบบของfile://URL ใน Java เพื่อใช้ใน.propertiesไฟล์หรือพิมพ์ด้วยตนเอง ฯลฯ
daveloyall

1
@SeanPatrickFloyd บางครั้งคุณไม่สามารถเข้าถึงซอร์สโค้ดได้เพียงแค่ไปยังคุณสมบัติและfile://น่าเสียดายที่จำเป็น การพึ่งพาระบบนั้นไม่ได้เป็นปัญหาใหญ่เพราะเป็นคุณสมบัติที่ไม่แน่นอน
vikingsteve

4

คุณยังสามารถใช้

[AnyClass].class.getResource(filePath)

2
แต่ถ้าไฟล์นั้นมีอยู่ใน classpath
aepurniet

1
หากสามารถพบ "filePath" ใน jar URL ที่ได้จะเป็นเช่นjar:file:/home/user/a/b/c/foo.jar!/com/example/stuff/config.txtนั้น
David Tonhofer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.