Il problema di fondo è che hai usato File.separator al posto di File.pathSeparator.
In Unix/Linux/Mac il separatore di percorsi è il carattere di due punti ( : ) che tu hai usato esplicitamente nella prova che hai fatto sul Mac.
In Windows invece tale carattere è il punto e virgola ( ; ).
File.pathSeparator restituisce, appunto, il carattere di separatore di percorsi, mentre File.separator restituisce il separatore di file... che su Windows è il backslash ( \ ), mentre su Unix/Linux/Mac è lo slash ( / ).
Quindi il codice che tu hai postato nel primo esempio non funziona da nessuna parte (né Mac, né Windows, né Linux, né Unix, né in quel che vuoi), mentre il secondo codice funziona solo sui sistemi *nix e Mac.
Ciao.