como deletar o conteúdo do arquivo de texto sem deletar a si mesmo


89

Desejo copiar o conteúdo do arquivo 'A' para o arquivo 'B'. depois que a cópia terminar, desejo limpar o conteúdo do arquivo 'A' e quero escrever nele desde o início. Não consigo excluir o arquivo 'A' porque está relacionado a outra tarefa.

Consegui copiar o conteúdo usando a API de arquivo do java (readLine ()), mas não sei como limpar o conteúdo do arquivo e definir o ponteiro do arquivo para o início do arquivo.

Respostas:


134

Basta imprimir uma string vazia no arquivo:

PrintWriter writer = new PrintWriter(file);
writer.print("");
writer.close();

14
A gravação não é necessária, e se outra tarefa tiver o arquivo aberto, a abertura pode nem mesmo ser possível.
Marquês de Lorne

writer.close ??, estamos em 2017 !!!. Além disso, não há necessidade de imprimir (""), porque o texto será sobrescrito
FSm

1
@Andro, reparou no carimbo de data / hora e nas tags? Naquela época, lembro que era a maneira mais confiável de esvaziar um arquivo em dispositivos Android.
Vlad

@Vlad Se não houver necessidade de fechar o escritor agora, talvez seja uma boa ideia atualizar a resposta?
Linha

70

Não acredito que você precise escrever uma string vazia no arquivo.

PrintWriter pw = new PrintWriter("filepath.txt");
pw.close();

9
Você está correto sobre isso. Todas as respostas que mostram uma escrita estão erradas ou, na melhor das hipóteses, redundantes.
Marquês de Lorne

33
Que tal new PrintWriter("filepath.txt").close();?
Supuhstar

1
citação de documentos java "Se o arquivo existir, ele será truncado para o tamanho zero"
Pinkerton

1
mas o que fazer se o arquivo estiver no modo anexar.
GURMEET SINGH

Oh cara, eu não posso acreditar que perdi a resposta simples. Abra o arquivo no modo truncado. Eu odeio o modo truncado tanto que me escapou.

30

Você deseja o método setLength () na classe RandomAccessFile.


5
Na verdade, esta é a única resposta correta, pois não exclui o arquivo. Todas as outras respostas sim.
Marquês de Lorne

Eu preciso disso porque gostaria de limpar o arquivo de log criado pela biblioteca logback-android . Se eu excluir o arquivo de log manualmente, a biblioteca não é inteligente o suficiente para criá-lo novamente se houver log para gravar até que eu reinicie meu aplicativo. Portanto, usei este método e trabalho. Não estudei muito. Não é a melhor abordagem? Conselho por favor.
Yeung

curiosamente, eu tenho um problema de produção porque o cartão Intenso classe 10 congela (e força a redefinição da bateria) quando eu chamo fileOnSdCard.setLength (0) para um aplicativo instalado de um arquivo .apk. Seu cartão de classe 4 nunca mostrou o problema.
Poutrathor



6

Que tal abaixo:

File temp = new File("<your file name>");
if (temp.exists()) {
    RandomAccessFile raf = new RandomAccessFile(temp, "rw");
    raf.setLength(0);
}

5

Depois de copiar de A para B, abra o arquivo A novamente para o modo de escrita e depois escreva uma string vazia nele


5

Um dos melhores companheiros para java são os projetos Apache e por favor consulte-os. Para operações relacionadas a arquivos, você pode consultar o projeto Commons IO .

O código abaixo de uma linha nos ajudará a esvaziar o arquivo.

FileUtils.write(new File("/your/file/path"), "")

4

Apenas escreva:

FileOutputStream writer = new FileOutputStream("file.txt");

2

Grave uma string vazia no arquivo, esvazie e feche. Certifique-se de que o gravador de arquivo não esteja no modo anexar. Eu acho que isso deve funcionar.


2

Se você não precisar usar o gravador depois, a maneira mais curta e limpa de fazer isso é:

new FileWriter("/path/to/your/file.txt").close();

1

usando: Nova biblioteca Java 7 NIO, tente

        if(!Files.exists(filePath.getParent())) {
            Files.createDirectory(filePath.getParent());
        }
        if(!Files.exists(filePath)) {
            Files.createFile(filePath);
        }
        // Empty the file content
        writer = Files.newBufferedWriter(filePath);
        writer.write("");
        writer.flush();

O código acima verifica se existe Directoty se não cria o diretório, verifica se o arquivo existe é sim ele grava uma string vazia e limpa o buffer, no final você obtém o gravador apontando para o arquivo vazio


0

Você pode usar

FileWriter fw = new FileWriter(/*your file path*/);
PrintWriter pw = new PrintWriter(fw);
pw.write("");
pw.flush(); 
pw.close();

Lembre-se de não usar

FileWriter fw = new FileWriter(/*your file path*/,true);

True no construtor de filewriter permitirá anexar.


0
FileOutputStream fos = openFileOutput("/*file name like --> one.txt*/", MODE_PRIVATE);
FileWriter fw = new FileWriter(fos.getFD());
fw.write("");

Bem-vindo ao SO! Use as ferramentas de formatação integradas para tornar seu código mais fácil de ler.
Michael L.

0

Com o gravador try-with-resources será fechado automaticamente:

import org.apache.commons.lang3.StringUtils;
final File file = new File("SomeFile");
try (PrintWriter writer = new PrintWriter(file))  {
    writer.print(StringUtils.EMPTY);                
}
// here we can be sure that writer will be closed automatically

0

Tudo o que você precisa fazer é abrir o arquivo no modo truncado. Qualquer classe de saída de arquivo Java fará isso automaticamente para você.


-2

você pode escrever um método genérico como (é tarde demais, mas o código abaixo ajudará você / outros)

public static FileInputStream getFile(File fileImport) throws IOException {
      FileInputStream fileStream = null;
    try {
        PrintWriter writer = new PrintWriter(fileImport);
        writer.print(StringUtils.EMPTY);
        fileStream = new FileInputStream(fileImport);
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            writer.close();
        }
         return fileStream;
}

5
Isso não cria um arquivo vazio, mas sim um arquivo com um byte nulo.
Marquês de Lorne
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.