2010-03-23 39 views

Trả lời

10

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); 
    } 
9

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

0

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ột InputStream 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ủa InputStream.
  • Đó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ạng InputStream thông tin đó không liên quan đến việc sử dụng. Trường thể hiện pathđượ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ó 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.

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