Since we are re-inventing the wheel here, I've always thought java.io.File screwed up by not having an equivalent for POSIX's struct stat.

In other words, I wonder if we shouldn't define the API to return an object that can obtain information about the entry, but which can also cache that information.  So "Entry" is just the pointer to the location with:

  public interface Entry {
    ...
    /** Obtain information about the entry; the resulting object
         may use caches internally to reduce calls.  If you need
         up-to-date information, obtain a new EntryStatus. */
    public EntryStatus status();
    ...
  } 

  /** Cached status information about an Entry */
  public interface EntryStatus {
      public static enum Type {
        FILE, DIRECTORY
      }

      public long length();
      public boolean exists();
      public Type type();
  }

And then we can write a java.io.File version of this interface as:

    static class FileEntryStatus {
        private final File path = ...;
        private long length = -1;

        public long length() {
          if (length < 0)
            length = path.length();
          return length;
        }
    }