Existe um equivalente Java para System.IO.Path.Combine()
em C # /. NET? Ou algum código para fazer isso?
Este método estático combina uma ou mais seqüências de caracteres em um caminho.
Existe um equivalente Java para System.IO.Path.Combine()
em C # /. NET? Ou algum código para fazer isso?
Este método estático combina uma ou mais seqüências de caracteres em um caminho.
Respostas:
Em vez de manter tudo baseado em cadeias, você deve usar uma classe projetada para representar um caminho do sistema de arquivos.
Se você estiver usando Java 7 ou Java 8, considere fortemente o uso
java.nio.file.Path
;Path.resolve
pode ser usado para combinar um caminho com outro ou com uma string. APaths
classe auxiliar também é útil. Por exemplo:Se você precisar atender a ambientes pré-Java-7, poderá usar o
java.io.File
seguinte:Se você quiser voltar como uma sequência posteriormente, poderá ligar
getPath()
. De fato, se você realmente quisesse imitarPath.Combine
, poderia escrever algo como:fonte
path2
(ignorandopath1
) sepath2
for um caminho absoluto. A versão Java eliminará o líder/
ou o\
tratará como um caminho relativo.File.getCanonicalPath
.File
em C #, se quisesse. (Eu estou supondo que você quer dizer a existência deFile
um benefício, que eu concordo com ele.)No Java 7, você deve usar
resolve
:Embora a classe Path NIO2 possa parecer um pouco redundante para File com uma API desnecessariamente diferente, ela é de fato sutilmente mais elegante e robusta.
Observe que
Paths.get()
(como sugerido por outra pessoa) não tem uma sobrecarga usando aPath
, e fazerPaths.get(path.toString(), childPath)
NÃO é a mesma coisa queresolve()
. DosPaths.get()
documentos :A função irmã
resolve
é a excelenterelativize
:fonte
A resposta principal é usar objetos de arquivo. No entanto, o Commons IO tem uma classe FilenameUtils que pode fazer esse tipo de coisa, como o método concat () .
fonte
Eu sei que faz muito tempo desde a resposta original de Jon, mas eu tinha um requisito semelhante ao do OP.
Como forma de estender a solução de Jon, vim com o seguinte, o qual seguirá um ou mais segmentos do caminho, tantos segmentos do caminho que você puder lançar nele.
Uso
Código aqui para outras pessoas com um problema semelhante
fonte
abordagem independente de plataforma (usa File.separator, ou seja, funcionará depende do sistema operacional em que o código está sendo executado:
fonte
Para aprimorar a resposta do JodaStephen, o Apache Commons IO possui o FilenameUtils, que faz isso. Exemplo (no Linux):
É independente da plataforma e produzirá os separadores que seu sistema precisar.
fonte
Aqui está uma solução que lida com várias partes do caminho e condições da aresta:
fonte
Se você não precisar de mais do que strings, poderá usar com.google.common.io.Files
para obter
fonte
Talvez esteja atrasado para a festa, mas eu queria compartilhar minha opinião sobre isso. Estou usando um padrão Builder e permiti
append
chamadas em cadeia convenientemente . Ele pode ser facilmente estendido para suportar o trabalho comPath
objetos também.Exemplo de uso:
O resultado
absolute
conterá algo como:ou talvez até:
fonte
Isso também funciona no Java 8:
fonte
Esta solução oferece uma interface para juntar fragmentos de caminho de uma matriz String []. Ele usa java.io.File.File (String pai, String filho) :
Então você pode simplesmente fazer:
Devoluções:
fonte