Capítulo 10 Sistema de Arquivos Introdução Acessando o sistema de arquivos A classe java.io.File 2 Introdução O pacote java.io Através do pacote java.io podemos utilizar a classe File para acessar e manipular arquivos e diretórios do sistema de arquivos. 3 Acessando o Sistema de Arquivos A classe java.io.File Uma instância da classe File representa um arquivo ou diretório que pode estar presente (ou não) em seu sistema de arquivos (HD, pen-drive, CD, etc) 4 A classe java.io.File Construtor File(String pathname) Podemos obter uma instância da classe File utilizando o caminho do arquivo ou diretório desejado: File doc = new File(“C:\\documentos\\doc.txt”); File img = new File(“E:\\imagens\\foto5.jpg”); File pasta = new File(“C:\\Meus Documentos”); File arq = new File(“config.txt”); Caminho relativo ao diretório atual da aplicação 5 A classe java.io.File Construtor File(File folder, String filename) Outra forma de instanciarmos a classe File é através do diretório que contém o arquivo desejado: File pasta = new File(“C:\\Meus Documentos”); File arquivo = new File(pasta, “config.txt”); 6 A classe java.io.File boolean exists() Verifica se a instância está apontando para um arquivo ou diretório já existente. boolean isFile() Verifica se a instância está apontando para um arquivo. boolean isDirectory() Verifica se a instância está apontando para um diretório. boolean isHidden() Verifica se a instância está apontando para um arquivo ou diretório existente e que tenha a propriedade “arquivo oculto” selecionada. 7 A classe java.io.File File temp = new File(“C:\\Documentos\\imagens\\temp”); if (!temp.exists()) { System.out.println(“Arquivo ou pasta não encontrado”); } else if (temp.isFile()) { System.out.println(“Arquivo temp encontrado”); } else if (temp.isDirectory()) { System.out.println(“Diretório temp encontrado”); } if (temp.isHidden()) { System.out.println(“Temp está oculto”); } 8 A classe java.io.File boolean delete() Tenta excluir o arquivo ou diretório, retornando true caso tiver sucesso. File temp = new File(“C:\\Documentos\\foto5.jpg”); boolean ok = temp.delete(); if (ok) { System.out.println(“Arquivo excluído com sucesso.”); } 9 A classe java.io.File boolean renameTo(File dest) Tenta mover e/ou renomear o arquivo ou diretório, retornando true caso tiver sucesso. File origem = new File(“C:\\Documentos\\foto5.jpg”); File destino = new File(“E:\\fotos\\carnaval.jpg”); boolean ok = origem.renameTo(destino); if (ok) { System.out.println(“Arquivo movido com sucesso.”); } 10 A classe java.io.File boolean createNewFile() Tenta criar um arquivo vazio, retornando true caso tiver sucesso. File novo = new File(“C:\\Documentos\\carta.txt”); boolean ok = novo.createNewFile(); if (ok) { System.out.println(“Arquivo criado com sucesso.”); } 11 A classe java.io.File boolean mkdir() Tenta criar um diretório, retornando true caso tiver sucesso. File novo = new File(“C:\\Documentos\\planilhas”); boolean ok = novo.mkdir(); if (ok) { System.out.println(“Diretório criado com sucesso.”); } 12 A classe java.io.File boolean mkdirs() Tenta criar um diretório e seus superdiretórios em cascata, retornando true caso tiver sucesso. File novo = new File(“E:\\Particular\\Docs\\Planilhas”); boolean ok = novo.mkdirs(); if (ok) { System.out.println(“Diretório criado com sucesso.”); } 13 A classe java.io.File String getPath() Retorna o caminho completo do arquivo ou diretório. File arquivo = new File(“C:\\Documentos\\Planilhas\\plan1.xls”); System.out.println(arquivo.getPath()); C:\Documentos\Planilhas\plan1.xls 14 A classe java.io.File String getName() Retorna o nome do arquivo ou diretório. File arquivo = new File(“C:\\Documentos\\Planilhas\\plan1.xls”); System.out.println(arquivo.getName()); plan1.xls 15 A classe java.io.File File getParentFile() Retorna uma referência ao diretório onde o arquivo ou diretório se encontra. File arquivo = new File(“C:\\Documentos\\Planilhas\\plan1.xls”); File pasta = arquivo.getParentFile(); System.out.println(pasta.getPath()); C:\Documentos\Planilhas 16 A classe java.io.File File[] listFiles() Retorna um array contendo referências de todos os arquivos e subdiretórios contidos no diretório especificado. Caso o item especificado não exista ou não seja um diretório, este método retorna null. 17 A classe java.io.File File pasta = new File(“C:\\Meus Documentos”); File[] arquivoArray = pasta.listFiles(); System.out.println(arquivoArray.length + “ itens encontrados”); for (File arquivo : arquivoArray) { System.out.println(arquivo.getName()); } 18 A classe java.io.File long length() Retorna o tamanho (em bytes) do arquivo especificado. File arquivo = new File(“C:\\Documentos\\Planilhas\\plan1.xls”); System.out.printf(“Tamanho do arquivo: %d bytes”, arquivo.length()); Tamanho do arquivo: 39936 bytes 19 A classe java.io.File long lastModified() Obtem um número sequencial referente à data da última modificação sobre o arquivo ou diretório. boolean setLastModified(long time) Assinala a data da última modificação sobre o arquivo. Utilize a classe java.util.Date para processar estas informações. 20 A classe java.io.File /* Obtém o instante da última modificação */ File arquivo = new File(“C:\\Documentos\\curriculo.doc”); long dataLong = arquivo.lastModified(); /* Converte para data. */ Date data = new Date(dataLong); /* Prepara o formato de exibição da data. */ SimpleDateFormat mascara = new SimpleDateFormat(“HH:mm:ss”); System.out.println(“Data da última modificação: ” + mascara.format(data)); 21 A classe java.io.File boolean canWrite() Verifica se o arquivo possui permissão para escrita. boolean setWritable(boolean writable) Assinala (true) ou revoga (false) a permissão para escrita no arquivo somente ao proprietário e retorna true ou false informando se a operação foi bem sucedida. boolean setWritable( boolean writable, boolean ownerOnly) Quando o segundo parâmetro é false, este método assinala ou revoga a permissão para escrita no arquivo a todos os usuários do sistema operacional. Quando o segundo parâmetro é true, assinala ou revoga somente para o proprietário do arquivo. 22 A classe java.io.File File arquivo = new File(“C:\\Documentos\\curriculo.doc”); if (arquivo.canWrite()) { System.out.println(“O arquivo pode ser editado.”); } else { System.out.println(“O arquivo não pode ser editado.”); } 23 A classe java.io.File File arquivo = new File(“C:\\Documentos\\curriculo.doc”); boolean result = arquivo.setWritable(true); if (result) { System.out.println(“Permissão de escrita concedida ” + “ao proprietário do arquivo.”); } else { System.out.println(“Não foi possível conceder ” + “permissão de escrita ao proprietário ” + “do arquivo.”); } 24 A classe java.io.File File arquivo = new File(“C:\\Documentos\\curriculo.doc”); boolean result = arquivo.setWritable(true, false); if (result) { System.out.println(“Permissão de escrita concedida ” + “a todos os usuários.”); } else { System.out.println(“Não foi possível conceder ” + “permissão de escrita a todos os usuários.”); } 25 A classe java.io.File boolean canRead() Verifica se o arquivo possui permissão para leitura. boolean setReadable(boolean readable) Assinala (true) ou revoga (false) a permissão para leitura no arquivo somente ao proprietário e retorna true ou false informando se a operação foi bem sucedida. boolean setReadable( boolean readable, boolean ownerOnly) Quando o segundo parâmetro é false, este método assinala ou revoga a permissão para leitura no arquivo a todos os usuários do sistema operacional. Quando o segundo parâmetro é true, assinala ou revoga somente para o proprietário do arquivo. 26 A classe java.io.File boolean canExecute() Verifica se o arquivo possui permissão para execução. boolean setExecutable(boolean executable) Assinala (true) ou revoga (false) a permissão para excução no arquivo somente ao proprietário e retorna true ou false informando se a operação foi bem sucedida. boolean setExecutable( boolean executable, boolean ownerOnly) Quando o segundo parâmetro é false, este método assinala ou revoga a permissão para execução no arquivo a todos os usuários do sistema operacional. Quando o segundo parâmetro é true, assinala ou revoga somente para o proprietário do arquivo. 27 Exercício Neste exercício utilizaremos a classe java.io.File para separar um conjunto de arquivos conforme seus tipos. 28 Exercício (Continuação) 1. Descompacte o arquivo “documentos.zip” fornecido pelo instrutor para algum diretório de seu HD. Isto deverá gerar um diretório chamado “documentos”. 2. Crie uma nova aplicação java, um package br.com.impacta.file e neste, uma classe ExercicioFile que deverá criar 3 subdiretórios em “documentos”: imagens mp3 pdf 3. ... e em seguida deverá varrer o diretório “documentos” movendo cada arquivo para um dos diretórios acima conforme sua extensão. 29 Exercício (Fim) Após executar a sua aplicação os arquivos deverão estar separados da seguinte forma: documentos imagens documentos xxx.jpg xxx.jpg xxx.jpg xxx.mp3 mp3 xxx.jpg xxx.mp3 xxx.pdf xxx.mp3 xxx.mp3 pdf xxx.pdf 30