Cách lấy Đường dẫn tệp/Tên từ InputStream trong Java?Đường dẫn/tên tệp từ InputStream
Trả lời
Không thể thực hiện được. (không phải từ FileInputStream trong API Java). Các nhà xây dựng FileInputStream
không lưu trữ thông tin này trong lĩnh vực bất kỳ:
public FileInputStream(File file) throws FileNotFoundException {
String name = (file != null ? file.getPath() : null);
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkRead(name);
}
if (name == null) {
throw new NullPointerException();
}
fd = new FileDescriptor();
open(name);
}
Bạn không thể vì InputStream
có thể không phải là tệp hoặc đường dẫn. Bạn có thể triển khai InputStream
của riêng mình để tạo dữ liệu khi đang bay
Hai Object Oriented quan trọng các nguyên tắc thiết kế ngăn cản bạn làm những gì bạn đang yêu cầu: trừu tượng và đóng gói.
- Abstraction là quá trình xác định một khái niệm chung mà chỉ có các chi tiết cần thiết cho việc sử dụng nó trong một bối cảnh cụ thể (chi tiết here). Trong trường hợp này, trừu tượng là
InputStream
, là giao diện chung có thể cung cấp byte, bất kể nguồn của những byte đó là. Sự trừu tượng của mộtInputStream
không có khái niệm về đường dẫn tệp; đó chỉ liên quan đến việc triển khai cụ thể củaInputStream
. - Đóng gói là quá trình ẩn chi tiết triển khai của lớp học từ người tiêu dùng/người dùng của lớp đó. Trong tình huống cụ thể này,
FileInputStream
đóng gói chi tiết của tệp mà nó đang đọc từ, vì dưới dạngInputStream
thông tin đó không liên quan đến việc sử dụng. Trường thể hiệnpath
là được đóng gói và như vậy không khả dụng đối với người dùng của lớp học.
Có nói rằng, nó là thể truy cập các biến path
nếu bạn sẵn sàng chấp nhận một số hạn chế quan trọng. Về cơ bản, ý chính là bạn có thể kiểm tra nếu InputStream
, trên thực tế, một thể hiện của FileInputStream
và, nếu có, hãy sử dụng sự phản chiếu để đọc trường thể hiện path
. Tôi sẽ bỏ qua các chi tiết của việc truy cập đó vì nó dễ dàng khám phá ra các tài liệu Java trực tuyến java.lang.Class
và thực sự không phải là một điều tốt để làm trong hầu hết các ngữ cảnh. Vì câu hỏi không cung cấp một bối cảnh về lý do tại sao, thật khó để đưa ra bất kỳ cách tiếp cận hợp lý nào hơn.
- 1. Tệp vào InputStream
- 2. Tải tệp từ bộ nhớ ngoài vào Inputstream
- 3. Giải nén tệp từ InputStream và trả lại một InputStream khác
- 4. Cách lấy InputStream từ BufferedImage?
- 5. Đọc văn bản từ InputStream
- 6. Nhận InputStream/io.Reader từ đối tượng OMElement
- 7. Loại bỏ ký tự newline từ InputStream
- 8. Thay đổi kích thước bitmap từ InputStream
- 9. Tải một tệp thuộc tính từ đường dẫn không nằm trong đường dẫn lớp của tôi
- 10. Đọc InputStream to Arraylist
- 11. CSVReader và InputStream
- 12. ZipInputStream (InputStream, Charset) giải mã tên tệp ZipEntry sai
- 13. Cách lấy đường dẫn tệp từ URI?
- 14. Trả lại tệp từ đường ray
- 15. Lấy tên tệp từ đường dẫn chuỗi?
- 16. trích xuất tên tệp từ đường dẫn
- 17. Tìm tên tệp từ đường dẫn tệp đầy đủ
- 18. Cách trích xuất tên tệp từ tên đường dẫn tệp?
- 19. Đóng đúng quy trình Java InputStream từ getInputStream
- 20. cách tạo InputStream từ Tài liệu hoặc Nút
- 21. Cách hiệu quả nhất để tạo ra InputStream từ OutputStream
- 22. Cách tạo một InputStream từ một chuỗi các chuỗi
- 23. Cách tránh mã hóa null (\ u0000) khi đọc từ InputStream
- 24. InputStream và InputStreamReader
- 25. Java InputStream kích thước
- 26. Liệu DocumentBuilder.parse đóng InputStream
- 27. Scala: InputStream to Array [Byte]
- 28. Đăng dữ liệu đa dạng dữ liệu lên đường may + RESTeasy không kết hợp với InputStream
- 29. tải tệp (xml) từ đường dẫn lớp trong ứng dụng web mùa xuân
- 30. Mạng Java: evented Socket/InputStream