2010-02-03 33 views
12

Tôi không thể lấy getResourceAsStream để tìm tệp. Tôi đã đặt các tập tin trong thư mục cấp cao nhất, mục tiêu dir, vv, vv và đã thử nó với một "/" ở phía trước là tốt. Mỗi lần nó trả về null.Eclipse getResourceAsStream trả về null

Mọi đề xuất? Cảm ơn.

public class T { 
public static final void main(String[] args) { 

    InputStream propertiesIS = T.class.getClassLoader().getResourceAsStream("test.txt"); 

    System.out.println("Break"); 
} 
} 

Trả lời

12

Đặt tệp "test.txt" vào cùng thư mục chứa tệp java của lớp học (cùng một gói). Sau đó, sử dụng

T.class.getResourceAsStream("test.txt"); 

Điều này hoạt động, vì nhật thực tự động sao chép tệp làm tài nguyên cho đường dẫn lớp. Khi sử dụng dòng lệnh, bạn phải làm điều này bằng tay.

+0

CẢM ƠN bạn ...bạn có thể giải thích tại sao nó không hoạt động với T.class.getClassLoader(). getResourceAsStream .. – Chris

+4

Nếu bạn sử dụng 'Class.getResourceAsStream (name)', 'name' được giải quyết bên trong. "test.txt" được chuyển thành "my/package/test.txt" và "/test.txt" được chuyển thành "test.txt". Sau đó, 'ClassLoader.getResourceAsStream()' được gọi với tên được chuyển đổi. Mã của bạn nên làm việc với cả hai phương pháp, nhưng bạn phải kiểm tra xem tệp của bạn "test.txt" có ở đúng nơi không (bên trong classpath của bạn). Với cuộc gọi của bạn, bạn phải đặt "test.txt" bên trong thư mục gói cấp cao nhất của mình. – tangens

+0

Yahoooo Lưu ngày của tôi –

0

Cũng đảm bảo tệp của bạn không khớp với bất kỳ mẫu nào của Tùy chọn> Java> Trình biên dịch> Tòa nhà> OutputFolder> Tài nguyên đã lọc:. Ví dụ: nếu bạn đặt * .txt trong trường đó, bạn sẽ không nhận được test.txt cho đầu ra xây dựng.

3

Đôi khi bạn cần nói nhật thực một cách rõ ràng loại tệp nào cần sao chép từ thư mục nguồn vào thư mục phân phối (lớp).

tôi có SDK Eclipse, Phiên bản: 3.7.1, Id xây dựng: M20110909-1335, Indigo và trong tôi đã thực hiện các thay đổi sau.

Project -> Properties -> Java Build Path -> Source (tab) -> Bao gồm (mục danh sách) -> Edit (nút) để thêm * / .txt đến hiện * / java.

9

Bạn không cần thêm các tệp này vào cùng một thư mục để nó hoạt động.

Tôi đã nhận được triệu chứng này khi tạo Thư mục gói và nguồn mới để giữ các kiểm tra junit của mình. Các thử nghiệm sẽ thất bại vì getResourceAsStream đã trả về null.

Dưới đây là cách khắc phục nó:

Kích chuột phải vào lớp (trong trường hợp của tôi, các lớp thử nghiệm junit mới) trong Eclipse Project Explorer Xem

Build Path -> Configure Build Path -> Đường dẫn xây dựng Java -> Tab nguồn -> Thêm thư mục

Chọn thư mục chứa tệp của bạn.

0

Đưa/tài nguyên/thư mục của tôi vào/bin/thư mục của tôi đã giải quyết vấn đề này cho tôi.

0

Câu hỏi cũ nhưng tôi chỉ có cùng một vấn đề và không có câu trả lời nào phù hợp với tôi (hoặc tôi không hiểu chúng).

Trong Eclipse, làm mới thư mục dự án để làm cho Eclipse biết rằng tệp mới đã được thêm vào tài nguyên. Để làm điều này, nhấn chuột phải vào thư mục dự án (trên cùng) trong khung nhìn trình thám hiểm gói, sau đó nhấn "Làm mới". Điều tương tự nếu bạn chỉnh sửa một tệp tài nguyên hiện có từ bên ngoài nhật thực: làm mới để làm cho nhật thực nhận thức được các chỉnh sửa.