Gerenciando arquivos

My name is Lucas. I'm a journalist and software developer who can take photos, print zines and make videos, that's no joke. 📸📰🎬💻🕺😅
A classe java.io.Filerepresenta um caminho abstrato para um arquivo ou diretório que pode ou não existir.
Além de percorrer a hierarquia de arquivos, no Java podemos também criar, excluir e renomear arquivos. Vamos considerar alguns métodos para isso. Você pode usar os métodos apresentados em diferentes sistemas operacionais. Nos exemplos, usamos um sistema do tipo UNIX.
Criando arquivos
Para criar um arquivo no sistema de arquivos, teremos que fazer o seguinte:
Crie uma instância
java.io.Filecom o caminho abstrato especificado.Invoque o método
createNewFiledesta instância.
Após criar uma instância de File, devemos invocar o método createNewFile. O método retorna true se o arquivo foi criado com sucesso e false se ele já existe. Ele não apaga o conteúdo de um arquivo existente.
File file = new File("/home/username/Documents/file.txt");
try {
boolean createdNew = file.createNewFile();
if (createdNew) {
System.out.println("The file was successfully created.");
} else {
System.out.println("The file already exists.");
}
} catch (IOException e) {
System.out.println("Cannot create the file: " + file.getPath());
}
O método retorna falso em vez de lançar uma exceção quando o arquivo já existe porque, às vezes, não importa para o programa se o arquivo foi criado agora ou se já existia.
Criando diretórios
Para criar um diretório, também precisamos começar criando uma instância de java.io.File. Depois disso, devemos chamar um dos dois métodos dessa instância:
boolean mkdir- Cria o diretório; retornatrueapenas se o diretório foi criado, caso contrário, retornafalse.boolean mkdirs- Cria o diretório incluindo todos os diretórios pai inexistentes necessários; retornatrueapenas se o diretório foi criado juntamente com todos os diretórios pai especificados.
Nenhum dos dois métodos lança exceção IOException, ao contrário do createNewFile método anterior. Veja o exemplo:
File file = new File("/home/art/Documents/dir");
boolean createdNewDirectory = file.mkdir();
if (createdNewDirectory) {
System.out.println("It was successfully created.");
} else {
System.out.println("It was not created.");
}
O código funciona da seguinte forma:
Se o diretório não existir, o diretório será criado.
Se o diretório já existir, nada é feito.
Se houver um diretório pai inexistente no caminho, o diretório também não será criado.
Nenhuma exceção ocorre em nenhum caso.
Aqui está outro exemplo, demonstrando o método mkdirs. Ele cria o diretório de destino e todos os diretórios pai, caso eles não existam.
File file = new File("/home/art/Documents/dir/dir/dir");
boolean createdNewDirectory = file.mkdirs();
if (createdNewDirectory) {
System.out.println("It was successfully created.");
} else {
System.out.println("It was not created.");
}Explique o código
A variável `booleana` será verdadeira true se o diretório foi criado, independentemente da existência dos diretórios pai.
Removendo arquivos e diretórios
Agora que sabemos como criar um diretório, vamos descobrir como removê-lo. Existe um método chamado delete para remover um arquivo ou diretório.
O método delete:
Retorna
truese, e somente se, o arquivo ou diretório for excluído com sucesso;Caso contrário, retorna
falseRetorna
falsese o arquivo ou diretório não existir.Retorna
falsese o diretório contiver subdiretórios ou arquivos.- Isso significa que o método não removerá uma hierarquia, apenas um arquivo específico ou um diretório vazio.
File file = new File("/home/art/Documents/dir/dir/dir");
if (file.delete()) {
System.out.println("It was successfully removed.");
} else {
System.out.println("It was not removed.");
}
Para excluir um diretório que não esteja vazio, primeiro você precisa excluir todos os arquivos e diretórios aninhados. Veja o código abaixo. Ele exclui recursivamente os diretórios com seu conteúdo. Observe que o método pressupõe que o diretório passado dir exista. Caso contrário, children == null, uma exceção NullPointerException será lançada.
public void deleteDirRecursively(File dir) {
File[] children = dir.listFiles();
for (File child : children) {
if (child.isDirectory()) {
deleteDirRecursively(child);
} else {
child.delete();
}
}
dir.delete();
}
O método delete nunca lança uma exceção IOException.
Existe também outro método para remover arquivos. Ele se chama deleteOnExit e remove um arquivo ou diretório quando o programa é encerrado. Observe que, uma vez solicitada a exclusão, não há como cancelá-la.
Renomear e mover arquivos e diretórios
O método renameTo altera o nome do arquivo editando-o no caminho abstrato. Ele retorna verdadeiro true se e somente se a renomeação for bem-sucedida; caso contrário, retorna falso false.
File file = new File("/home/art/Documents/dir/filename.txt");
boolean renamed = file.renameTo(new File("/home/art/Documents/dir/newname.txt"));
O mesmo método pode ser usado para mover o arquivo ou diretório do local atual para outro:
File file = new File("/home/art/Documents/dir/file.txt");
boolean renamed = file.renameTo(new File("/home/art/Documents/another/file.txt"));
Muitos aspectos do comportamento deste método ainda dependem da plataforma. Ele pode não conseguir mover um arquivo de um sistema de arquivos para outro e pode falhar se já existir um arquivo com o mesmo destino. O valor de retorno deve sempre ser verificado para garantir que a operação foi bem-sucedida.
File file = new File("/home/art/Documents/dir/filename.txt");
File renamedFile = new File("/home/art/Documents/dir/newname.txt");
boolean renamed = file.renameTo(renamedFile);
if (renamed) {
System.out.println("It was successfully renamed.");
} else {
System.out.println("It was not renamed.");
}
O método renameTo gera uma exceção NullPointerException caso o arquivo de destino seja nulo.
A maioria dos métodos considerados retorna falso caso você não tenha permissão para executar a operação correspondente: renomear, mover ou remover arquivos e diretórios. No entanto, o método create lança a exceção java.io.IOException em casos semelhantes.
Resumo
Consideramos um conjunto de métodos para gerenciar arquivos e diretórios: criar, excluir e renomear. Esses métodos retornam um valor booleano que depende do sucesso da operação.



