PathUtil { public static String relativePath( File home, File f ) { List<String> homelist = pathList( home ); List<String> filelist = pathList( f ); return matchPathLists( homelist, filelist ).replace( '\\', '/' ); } private  PathUtil(); static boolean existAll( File... files ); static boolean existAll( List<String> paths ); static boolean existAny( File... files ); static File[] existingFiles( Collection<String> paths ); static File[] existingFiles( File... files ); static List<File> existingFilesList( Collection<String> paths ); static List<File> existingFilesList( List<File> files ); static File file( File file ); static File file( String path ); static File file( String path, File basedir ); static File file( String path, File... basedirs ); static File file( String path, List<File> basedirs ); static File file( String path, String basedir ); static String fileExtention( File file ); static File[] files( Collection<String> paths ); static Collection<File> files( List<String> paths, File basedir ); static File[] files( String... paths ); static Collection<File> files( String[] paths, File basedir ); static File[] files( String[] paths, List<File> basedirs ); static List<File> filesList( Collection<String> paths ); static String path( File file ); static String[] paths( Collection<File> files ); static String[] paths( File... files ); static List<String> pathsList( File[] files ); static List<String> pathsList( List<File> files ); static String pathString( File[] files ); static String relativePath( File home, File f );  }
@Test public void testGetRelativePath() { assertThat( PathUtil.relativePath( new File( "/home" ), new File( "/home/velo/content" ) ), equalTo( "velo/content" ) ); assertThat( PathUtil.relativePath( new File( "/home/velo/content" ), new File( "/home/velo/c2" ) ), equalTo( "../c2" ) ); assertThat( PathUtil.relativePath( new File( "/home/velo/content" ), new File( "/home/velo2" ) ), equalTo( "../../velo2" ) ); }