Quase todos os programadores Java conhecem os métodos citados no título, mas muito poucos se preocupam em utiliza-los.
Estes dois métodos servem para que o programador não precise “adivinhar” qual é o separador de arquivos e qual é o separador de caminhos em cada sistema operacional.
No Linux/Unix, os métodos File.separator e File.pathSeparator retornam “/” e “.” respectivamente, enquanto que, no Windows, estes mesmos métodos retornam “\” (ou “\\” – escape) e “;”.
Passei por um caso recente, onde o código abaixo lançava a exception FileNotFoundException no Linux, mas funcionava perfeitamente no Windows:
String caminhoAp = ctx.getRealPath(); String caminhoArq = caminhoAp + "\\" + "WEB-INF/classes/pacotes/da/minha/aplicacao/"; File arquivo = new File(caminhoArq, "relatorio.pdf"); OutputStream out = new FileOutputStream(arquivo); ...
Então passou a funcionar nos dois sistemas operacionais após substituir “\\” por File.separator na linha 2, desta forma:
String caminhoAp = ctx.getRealPath(); String caminhoArq = caminhoAp + File.separator + "WEB-INF/classes/pacotes/da/minha/aplicacao/"; File arquivo = new File(caminhoArq, "relatorio.pdf"); OutputStream out = new FileOutputStream(arquivo); ...
A utilização destes métodos, além de ser uma boa prática, é muito útil quando se tem a mesma versão de um sistema feito em Java rodando de diferentes sistemas operacionais.

