คำถามติดแท็ก getresource

7
Class.getResource () และ ClassLoader.getResource () แตกต่างกันอย่างไร?
ฉันสงสัยว่าความแตกต่างระหว่างClass.getResource()และเป็นClassLoader.getResource()อย่างไร แก้ไข: ฉันต้องการทราบเป็นพิเศษหากแคชใด ๆ ที่เกี่ยวข้องในระดับไฟล์ / ไดเรกทอรี เช่นเดียวกับใน "รายการไดเรกทอรีถูกแคชในรุ่น Class?" AFAIK ต่อไปนี้ควรทำเช่นเดียวกัน แต่ไม่: getClass().getResource() getClass().getClassLoader().getResource() ฉันค้นพบสิ่งนี้เมื่อเล่นซอกับรหัสการสร้างรายงานที่สร้างไฟล์ใหม่WEB-INF/classes/จากไฟล์ที่มีอยู่ในไดเรกทอรีนั้น เมื่อใช้วิธีการจากชั้นเรียนฉันสามารถค้นหาไฟล์ที่มีเมื่อใช้งานโดยใช้getClass().getResource()แต่เมื่อพยายามดึงไฟล์ที่สร้างขึ้นใหม่ฉันได้รับวัตถุที่ไม่มีค่า การเรียกดูไดเรกทอรีอย่างชัดเจนแสดงว่ามีไฟล์ใหม่ ชื่อไฟล์ถูกต่อท้ายด้วยเครื่องหมายสแลชเช่นเดียวกับใน "/myFile.txt" ในทางกลับกันClassLoaderเวอร์ชั่นของเวอร์ชั่นgetResource()ก็พบไฟล์ที่สร้างขึ้น จากประสบการณ์นี้ดูเหมือนว่าจะมีการแคชรายการไดเรกทอรีที่เกิดขึ้น ฉันถูกและถ้าเป็นเช่นนั้นเอกสารนี้อยู่ที่ไหน? จากAPI เอกสารบนClass.getResource() ค้นหาทรัพยากรที่มีชื่อที่กำหนด กฎสำหรับการค้นหาทรัพยากรที่เกี่ยวข้องกับคลาสที่กำหนดถูกนำไปใช้โดยการกำหนดคลาสโหลดเดอร์ของคลาส วิธีนี้มอบให้กับ class loader ของวัตถุนี้ หากวัตถุนี้ถูกโหลดโดยตัวโหลดคลาส bootstrap วิธีจะมอบหมายให้ ClassLoader.getSystemResource (java.lang.String) สำหรับฉันการอ่านนี้ "Class.getResource เรียกชื่อ getResource () ของ classloader ของมันเอง" getClass().getClassLoader().getResource()ซึ่งก็จะเป็นเช่นเดียวกับการทำ แต่เห็นได้ชัดว่าไม่ใช่ มีใครช่วยเล่าเรื่องนี้ให้ฉันฟังหน่อยได้ไหม?

16
จะแสดงรายการไฟล์ภายในไฟล์ JAR ได้อย่างไร?
ฉันมีรหัสนี้ซึ่งอ่านไฟล์ทั้งหมดจากไดเร็กทอรี File textFolder = new File("text_directory"); File [] texFiles = textFolder.listFiles( new FileFilter() { public boolean accept( File file ) { return file.getName().endsWith(".txt"); } }); มันใช้งานได้ดี มันเติมอาร์เรย์ด้วยไฟล์ทั้งหมดที่ลงท้ายด้วย ".txt" จากไดเร็กทอรี "text_directory" ฉันจะอ่านเนื้อหาของไดเร็กทอรีในลักษณะเดียวกันภายในไฟล์ JAR ได้อย่างไร สิ่งที่ฉันอยากทำจริงๆคือแสดงรายการภาพทั้งหมดในไฟล์ JAR ของฉันดังนั้นฉันจึงสามารถโหลดได้ด้วย: ImageIO.read(this.getClass().getResource("CompanyLogo.png")); (อันนี้ใช้ได้เพราะ "CompanyLogo" เป็น "ฮาร์ดโค้ด" แต่จำนวนภาพในไฟล์ JAR อาจมีความยาวตัวแปรได้ตั้งแต่ 10 ถึง 200) แก้ไข ดังนั้นฉันเดาว่าปัญหาหลักของฉันคือ: จะรู้ชื่อไฟล์ …
114 java  file  jar  java-io  getresource 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.