Primeiro a nossa classe de exemplo (lembrem que só vai compilar se seu Java SE for 7) :
import java.nio.file.*;
import java.io.IOException;
/**
* @param arg[0] padrao a ser procurado
* @param arg[1] novo valor
* @param arg[2] arquivo ou diretorio
* @param arg[3] arquivo ou diretorio
* ....
*/
class Renomear {
String padrao;
String novoPadrao;
public Renomear(String seq, String novaSeq) {
padrao = seq;
novoPadrao = novaSeq;
}
public void executar(String arquivo) {
Path f = FileSystems.getDefault().getPath(arquivo);
// getFileName() retorna Path por isto temos que encadear
// com .toString() para procurar pelo padrao
String nomeArquivo = f.getFileName().toString();
if (nomeArquivo.contains(padrao)) {
// move() funciona para mover um arquivo ou para renomea-lo
try {
Files.move(f, f.resolveSibling( nomeArquivo.replace(padrao, novoPadrao) ));
} catch (IOException e) {
System.out.println(e.toString());
}
}
}
public static void main(String[] args) {
if (args.length < 3) {
System.out.println("Uso: java Renomear \"padrao original\" \"novo padrao\" {nomeArquivo|nomeDiretorio} [{nomeArquivo|nomeDiretorio}]");
System.exit(0); // sair
}
Renomear r = new Renomear(args[0], args[1]);
for(int i = 2; i < args.length; i++)
r.executar(args[i]); // renomeia cada arquivo da lista
}
}
Compilamos, rodamos e (acreditem) funciona!
O padrão procurado foi "~" que será trocado por "lll". Um dos arquivos selecionado na lista está marcado com a seta. Na imagem abaixo está o resultado.
Vamos ver o que foi utilizado:
- FileSystems.getDefault() retorna o objeto FileSystem default que utilizaremos para obter o path para o arquivo. Este método retorna FileSystem e por isto podemos utilizar o método abaixo.
- FileSystems.getDefault().getPath(String s) converte uma String com um caminho e retorna um objeto do tipo Path que pode ser utilizado para localizar e/ou acessar um arquivo.
- Path.getFileName() retorna um Path com o nome do arquivo (ou diretório) representado pelo objeto Path.
- Path.toString() retorna uma String com o caminho do arquivo/diretório. Em função disto podemos usar uam chamada com Path.getFileName().toString() para obter o nome do arquivo como String.
- Files.move() tem o seguinte formato move(Path origem, Path destino, CopyOption opcoes). Este terceiro parâmetro é opcional e nós não utilizamos. move() permite mover ou renomear o arquivo da mesma maneira que o comando mv do linux.
- Path.resolveSibling(String s) converte uma string em um caminho, utilizando o caminho original. Por exemplo:
- se temos um Path p com "/var/log/system"
- Path p1 = p.resolveSibling("system.1");
- p1 vai ser "/var/log/system.1"
Bacana!
Nenhum comentário:
Postar um comentário