Tôi chỉ muốn đọc một tệp trong chương trình của mình. Tệp nằm ở một thư mục phía trên thư mục làm việc tại "../f.fsh". Vì vậy, các mã sau chạy một cách chính xác khi tôi chạy nó trong IDETại sao getResourceAsStream() hoạt động trong IDE chứ không phải JAR?
String name="../f.fsh";
InputStream is = getClass().getResourceAsStream(name);
InputStreamReader isreader=new InputStreamReader(is);//CRASHES HERE WITH NULL POINTER EXCEPTION
BufferedReader br = new BufferedReader(isreader);
nhưng khi tôi tạo ra một tập tin JAR đã f.fsh nén bên trong của nó và chạy nó, nó bị treo khi tạo InputStreamReader, vì InputStream là null.
Tôi đã đọc một loạt câu trả lời cho các câu hỏi về luồng đầu vào và tệp JAR và những gì tôi nhận được là tôi nên sử dụng đường dẫn tương đối, nhưng tôi đã làm điều đó. Từ những gì tôi hiểu getResourceAsStream() có thể tìm thấy các tập tin liên quan đến thư mục gốc của dự án, đó là những gì tôi muốn. Tại sao nó không hoạt động trong JAR? Điều gì đang xảy ra, làm thế nào tôi có thể sửa nó?
Có phải liên quan đến classpath không? Tôi nghĩ rằng đó là chỉ để bao gồm các tập tin bên ngoài để bình đang được chạy.
Tôi cũng đã cố gắng, nhưng vẫn thất bại, khi đặt một dấu gạch chéo trong:
InputStream is = getClass().getResourceAsStream("\\"+name);
Tôi nhìn: How to get a path to a resource in a Java JAR file andfound rằng nội dung của một JAR có thể không nhất thiết phải được truy xuất như một tập tin. Vì vậy, tôi đã thử nó với sao chép các tập tin liên quan đến các jar (một thư mục lên từ jar), và điều đó vẫn không thành công. Trong mọi trường hợp, tôi muốn để lại các tập tin của tôi trong lọ và có thể đọc chúng ở đó. Tôi không biết chuyện gì đang xảy ra.
Cảm ơn, điều đó có ý nghĩa. Tôi đã thay đổi vị trí tệp của mình và vị trí của tài nguyên của tôi và nó có thể vượt qua lỗi này trong bình. Tôi sẽ không bao giờ nghĩ rằng Eclipse có một lỗi trong lợi của tôi. Cảm ơn bạn rất nhiều! – AAB