Define the FileSystemVisitor interface, and a concrete class to implement it that prints out file and directory names and visits directory children.

	public interface FileSystemNode
	{
	    public void accept(FileSystemVisitor fsv)
	}
	
	public class FileNode implements FileSystemNode
	{
	    private String fileName;
	    public FileNode(String name)
	    {
	        fileName = name;
	    }
	    public String getName()
	    {
	        return fileName;
	    }
	    public void accept(FileSystemVisitor fsv)
	    {
	        fsv.visitFileNode(this);
	    }
	}
	
	import java.util.ArrayList;
	public class DirectoryNode implements FileSystemNode
	{
	    private String directoryName;
	    private ArrayList<FileSystemNode> children;
	    public FileNode(String name)
	    {
	        directoryName = name;
	        children = new ArrayList<FileSystemNode>();
	    }
	    public String getName()
	    {
	        return directoryName;
	    }
	    public void addChild(FileSystemNode fsn)
	    {
	        children.add(fsn);
	    }
	    public ArrayList<FileSystemNode> getChildren()
	    {
	        return new ArrayList<FileSystemNode>(children);
	    }
	    public void accept(FileSystemVisitor fsv)
	    {
	        fsv.visitDirectoryNode(this);
	    }
	}