2013-04-15 56 views
10

Mã của tôi:.getResourceAsStream filepath khi chạy .jar

BufferedInputStream bis = 
    new BufferedInputStream(getClass().getResourceAsStream("playerhit.mp3")); 

Mã này hoạt động tốt khi tập tin playerhit.mp3 là trong cùng một gói như MP3.class nó đang chạy trong Tôi đang chạy này là .jar. Nếu tôi thay đổi đường dẫn tập tin thành một cái gì đó như /src/data/audio/playerhit.mp3 nó không hoạt động nữa. Có anyway để truy cập filepath khác với gốc của gói trong khi chạy như .jar?

+0

là 'cái playerhit.mp3' sao chép vào classpath của bạn trong thời gian xây dựng? Những gì bạn sử dụng để xây dựng: Ant, Maven, ...? –

+0

Tôi không nghĩ vậy ... và tôi đang sử dụng netbeans để xây dựng. – user2281673

+0

Bạn có sử dụng "data/audio/playerhit.mp3" thay vì "playerhit.mp3" không? – NINCOMPOOP

Trả lời

6

Hãy xem qua số Javadoc for getResourceAsStream(...).

Nếu đối số bắt đầu bằng /, thì tên tuyệt đối của tài nguyên là phần tên sau /. Nếu không, tên tuyệt đối có dạng sau: modified_package_name/name Trường hợp tên modified_package_name là tên gói của đối tượng này với / được thay thế cho ..

Vì vậy, nếu playerhit.mp3 của bạn nằm trong thư mục gốc của cấu trúc gói, bạn nên tham khảo nó là /playerhit.mp3. Nếu nó ở trong /src/data/audio/, có thể bạn nên sử dụng /data/audio/playerhit.mp3 - nhưng hãy kiểm tra nội dung tệp JAR của bạn để chắc chắn.

+0

Đó là /data/audio/playerhit.mp3. Tôi đã thử sử dụng "/ data/audio /" mà không hoạt động ngay cả khi chạy trực tiếp từ netbeans và "./data/audio" hoạt động otherwive nhưng không phải khi chạy từ .jar – user2281673

+0

Thư mục 'data' trên classpath của bạn trong Netbeans? Phương thức 'getResourceAsStream()' chỉ tải các tài nguyên trên đường dẫn lớp. – mthmulders

+1

Ok bây giờ tôi cảm thấy ngu ngốc. Sau khi sử dụng đường dẫn như chỉ là "dữ liệu/audio/filename.mp3" mà không có dấu gạch chéo hoặc chấm tôi đã nhận nó để làm việc. Chúc mừng các bạn, hy vọng điều này ít nhất sẽ giúp người khác – user2281673

0

Kiểm tra đầu tiên xem tệp có thực sự trong bình không.

Kiểm tra vị trí bên trong bình.

tương đối đường dẫn: gói hiện

con đường tuyệt đối: gốc rễ của jar