class FileSystemResourceAccessor extends CompositeResourceAccessor {

    /**
     * Creates a FileSystemResourceAccessor with the given directories/files as the roots.
     */
    public FileSystemResourceAccessor(File... baseDirsAndFiles) {
        for (File base : CollectionUtil.createIfNull(baseDirsAndFiles)) {
            addRootPath(base);
        }
    }

    /**
     * @deprecated use {@link FileSystemResourceAccessor#FileSystemResourceAccessor(File...)}
     */
    public FileSystemResourceAccessor(String file) {
        this(new File(file));

    }

    protected void addRootPath(Path path) {
        if (path == null) {
            return;
        }
        addRootPath(path.toFile());
    }

    protected void addRootPath(File base) {<FILL_FUNCTION_BODY>}
}

        if (base == null) {
            return;
        }

        try {
            if (!base.exists()) {
                Scope.getCurrentScope().getLog(getClass()).warning("Non-existent path: " + base.getAbsolutePath());
            } else if (base.isDirectory()) {
                addResourceAccessor(new DirectoryResourceAccessor(base));
            } else if (base.getName().endsWith(".jar") || base.getName().toLowerCase().endsWith("zip")) {
                addResourceAccessor(new ZipResourceAccessor(base));
            } else {
                throw new IllegalArgumentException(base.getAbsolutePath() + " must be a directory, jar or zip");
            }
        } catch (FileNotFoundException e) {
            throw new UnexpectedLiquibaseException(e);
        }
    
<methods>public transient void <init>(liquibase.resource.ResourceAccessor[]) ,public void <init>(Collection<liquibase.resource.ResourceAccessor>) ,public liquibase.resource.CompositeResourceAccessor addResourceAccessor(liquibase.resource.ResourceAccessor) ,public void close() throws java.lang.Exception,public List<java.lang.String> describeLocations() ,public List<liquibase.resource.Resource> getAll(java.lang.String) throws java.io.IOException,public void removeResourceAccessor(liquibase.resource.ResourceAccessor) ,public List<liquibase.resource.Resource> search(java.lang.String, liquibase.resource.ResourceAccessor.SearchOptions) throws java.io.IOException,public List<liquibase.resource.Resource> search(java.lang.String, boolean) throws java.io.IOException<variables>private final non-sealed List<liquibase.resource.ResourceAccessor> resourceAccessors