FIle SHaring, A Distributed File System. Peer to Peer and Server-Client Implementations using Java