Olá pessoal!
Talvez isso seja até uma pergunta para o “Java Básico” mas como trata-se de manipulação de arquivos vamos lá:
o metódo java.io.File.delete(); deleta o arquivo definitivamente do disco?
Abs
Olá pessoal!
Talvez isso seja até uma pergunta para o “Java Básico” mas como trata-se de manipulação de arquivos vamos lá:
o metódo java.io.File.delete(); deleta o arquivo definitivamente do disco?
Abs
Sim. Delete chama a função de exclusão do sistema operacional. E aí, adeus.
Você até pode tentar recorrer a programas de undelete, como esses aqui:
Eu já usei o Recuva e é muito bom.
Só complementando:
Esse método solicita ao sistema operacional (Windows, Linux, Solaris etc.) que o arquivo seja removido (“unlink”) do disco. Como isso é interpretado pelo sistema operacional depende, obviamente, do sistema operacional.
No caso do Linux, Solaris e outros Unix, o “unlink” remove o arquivo do diretório solicitado; isso não quer dizer que o arquivo “em si” desapareça porque ele pode estar sendo referenciado por um outro “link” (no Unix é possível usar o recurso de “hard link” em que um mesmo arquivo está sendo referenciado com vários nomes diferentes (e até mesmo em vários diretórios diferentes).
Outra sutileza é que é possível remover um arquivo que está ainda aberto e em uso - ele não aparece mais na entrada do diretório, mas você pode até ler e gravar dele se você ainda tiver um “descriptor” para ele. O arquivo continua ocupando espaço. Quando todos os programas que estavam usando esse arquivo fecharem o arquivo, então ele vai realmente sumir.
No caso do Windows, o “delete” está submetido às regras do Windows (ou seja, não é possível deletar ou renomear um arquivo em uso), e normalmente o “delete” falha porque o arquivo ainda está em uso por algum motivo. Um problema sério é que nem sempre ele reporta corretamente ao programa que está efetuando a chamada à API “DeleteFile” por que é que não deletou o arquivo; e muitas vezes o “delete” do Java acaba reportando que o arquivo foi deletado com sucesso, quando na verdade não foi. No Windows é recomendável, depois de um “delete”, checar se o arquivo ainda existe…
Senhores, obrigado pelas respostas.
Estou na manutenção de um sistema de troca de dados (EDI) e o mesmo criptografa determinados arquivos com dados sensíveis, excluindo os originais após esse processo. Preciso garantir que essa exclusão seja em definitivo. Garantir isso inclusive é uma ação dentre várias para se obter a certificação do PCI Security Standards Council pela empresa.
Existe alguma forma de excluir arquivos definitivamente, mesmo utilizando esses programas de undelete?
O que normalmente se faz é o seguinte: usar um programa externo (normalmente escrito em C) que deve ser chamado ANTES de você apagar o arquivo, para que esse programa DELETE SEGURAMENTE o arquivo para você.
A idéia é que ele apague o arquivo para você, mas antes ele costuma fazer o seguinte: se o sistema de arquivos sendo usado é em disco e o diretório está configurado para não apagar os arquivos, esse programa sobreescreve o arquivo com um padrão de zeros e uns binários de forma que seja bastante difícil recuperar o arquivo se você não tiver ferramentas especiais.
Um exemplo de um programa desses é o sdelete:
No caso do Linux, você pode tentar usar alguma das ferramentas disponíveis no pacote secure-delete (se for o Ubuntu) ou coisa parecida na sua distribuição de preferência:
http://techthrob.com/2009/03/02/howto-delete-files-permanently-and-securely-in-linux/
Obrigado pessoal.
Valeu pelos esclarecimentos.