2013-08-22 36 views
6

Tôi hiện có một dự án trong Java thiết lập với cấu trúc thư mục sau trong Eclipse:Java nhận được tập tin như tài nguyên khi nó trong thư mục dự án

enter image description here

Và trong mã của tôi, tôi có những dòng sau:

InputStream is = this.getClass().getClassLoader().getResourceAsStream("resources/config"); 
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is)); 

Tuy nhiên, InputStream is luôn được gán cho null, gây ra sự cố khi đến dòng thứ hai. Tôi biết nó có một cái gì đó để làm với cách tôi thiết lập con đường mà nó đang tìm kiếm, nhưng tôi không thể tìm ra chính xác lý do tại sao nó không hoạt động.

+0

Tạo 'tài nguyên s' một thư mục nguồn với Eclipse. –

+0

Khi tôi xuất mã đã hoàn thành dưới dạng một tệp thực thi, điều đó có gây ra các vấn đề với đề xuất của bạn không? Về cơ bản tôi muốn có thể chỉnh sửa cấu hình này ngay cả sau khi tôi đã xuất nó dưới dạng tệp thực thi. – user1806716

+1

@SotiriosDelimanolis sau đó sử dụng 'InputStream là = this.getClass(). GetClassLoader(). GetResourceAsStream ("/config ");' :) – Katona

Trả lời

9

Tệp config của bạn nằm trong dự án của bạn, ở đâu đó trên hệ thống tệp.

Tuy nhiên, Eclipse không đặt nó trên đường dẫn lớp. Để buộc nó phải nằm trên đường dẫn lớp, hãy nhấp chuột phải vào thư mục của bạn và thêm nó làm thư mục nguồn. Sau đó Eclipse sẽ thêm nó vào thư mục gốc của classpath. Bạn có thể truy xuất nó với

InputStream is = this.getClass().getResourceAsStream("/config"); 

Eclipse đặt mọi thứ vào resources thư mục nguồn bắt đầu từ gốc của đường dẫn lớp. Do đó

resources/config

sẽ xuất hiện trong classpath như

/config 
/qbooksprintfix/FileChecker 
/qbooksprintfxi/FilePurgeHandler 
/... 
+0

Vì vậy, tôi không thể có src VÀ nguồn tài nguyên như thư mục nguồn? Tách chúng là lý tưởng để tôi có thể chỉnh sửa cấu hình dễ dàng hơn khi tôi xuất nó. – user1806716

+0

@ user1806716 Bạn có thể có cả hai (và nhiều hơn nữa) dưới dạng thư mục nguồn. Nếu bạn không muốn tệp của mình ở gốc, bạn có thể tạo thư mục 'resources' thứ hai bên trong thư mục' resources' ban đầu là '/ resources/resources/config'. Sau đó, tệp sẽ có thể truy cập được dưới dạng 'getResourceAsStream ("/resources/config ")'. Bạn vẫn phải tạo thư mục gốc là thư mục 'source' mặc dù trên đường dẫn Xây dựng của Eclipse. Bạn có thể muốn nhìn vào Maven vì nó tương tự như vậy. –

+0

Tôi thiết lập resouces là một thư mục src cho dự án và thay đổi dòng bạn chỉ định (bây giờ nó chỉ tìm "/ config") và nó vẫn ném con trỏ null khi nó được vào dòng bufferedreader =/ – user1806716

0

Hãy thử whit InputStream is = this.getClass().getClassLoader().getResource("/resources/config").openStream();

hoặc InputStream is = this.getClass().getClassLoader().getResourceAsStream("/resources/config");

Trong cả hai trường hợp chắc chắn để đặt "/" trước khi "tài nguyên"

Các vấn đề liên quan