ฉันกำลังโหลดไฟล์ข้อความจากภายในแพ็คเกจใน JAR ที่คอมไพล์แล้วของโปรเจ็กต์ Java ของฉัน โครงสร้างไดเรกทอรีที่เกี่ยวข้องมีดังนี้:
/src/initialization/Lifepaths.txt
รหัสโหลดไฟล์ของฉันโดยการเรียกกลับClass::getResourceAsStream
InputStream
public class Lifepaths {
public static void execute() {
System.out.println(Lifepaths.class.getClass().
getResourceAsStream("/initialization/Lifepaths.txt"));
}
private Lifepaths() {}
//This is temporary; will eventually be called from outside
public static void main(String[] args) {execute();}
}
การพิมพ์ออกมาจะพิมพ์เสมอnull
ไม่ว่าฉันจะใช้อะไร ฉันไม่แน่ใจว่าทำไมข้างต้นใช้งานไม่ได้ดังนั้นฉันจึงได้ลอง:
"/src/initialization/Lifepaths.txt"
"initialization/Lifepaths.txt"
"Lifepaths.txt"
ไม่มีงานเหล่านี้ ฉันได้ อ่าน คำถามมากมาย ในหัวข้อนี้ แต่ไม่มีคำถามใดที่เป็นประโยชน์ - โดยปกติพวกเขาบอกว่าโหลดไฟล์โดยใช้รูทพา ธ ซึ่งฉันทำอยู่แล้ว หรือเพียงแค่โหลดไฟล์จากไดเรกทอรีปัจจุบัน (แค่โหลดfilename
) ซึ่งฉันได้ลองด้วย ไฟล์กำลังถูกคอมไพล์ลงใน JAR ในตำแหน่งที่เหมาะสมพร้อมชื่อที่เหมาะสม
ฉันจะแก้ปัญหานี้ได้อย่างไร
Lifepaths.class
ในขณะที่ฉันไม่สามารถเรียกว่าจากบริบทแบบคงที่ฉันสามารถเรียกใช้มัน ที่ถูกกล่าวว่าทำไมgetClassLoader()
อนุญาตให้ทำงาน (นอกจากนี้อย่าลังเลที่จะโพสต์คำตอบ!)
Lifepaths.getClass()
ไหม ไม่มีวิธีการคงดังกล่าวกำหนดไว้ในวัตถุคือ ...
getResource(String)
ได้หรือไม่ BTW - ฉันมักจะมีปัญหาในการทำให้ทั้งสองอย่างนี้ทำงานในstatic
บริบท ปัญหาคือโดยพื้นฐานแล้วตัวโหลดคลาสที่ได้รับคือสิ่งที่มีไว้สำหรับคลาส J2SE คุณต้องได้รับการเข้าถึงคลาสโหลดเดอร์บริบทซึ่งมีไว้สำหรับแอปพลิเคชัน