jak usunąć zawartość pliku tekstowego bez usuwania samego siebie


90

Chcę skopiować zawartość pliku „A” do pliku „B”. po skopiowaniu chcę wyczyścić zawartość pliku „A” i pisać na nim od początku. Nie mogę usunąć pliku „A”, ponieważ jest on powiązany z jakimś innym zadaniem.

Udało mi się skopiować zawartość za pomocą API pliku Java (readLine ()), ale nie wiem, jak wyczyścić zawartość pliku i ustawić wskaźnik pliku na początek pliku.

Odpowiedzi:


135

Po prostu wydrukuj pusty ciąg do pliku:

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

14
Zapis nie jest konieczny, a jeśli inne zadanie ma otwarty plik, może nawet nie być możliwe.
Markiz Lorne

writer.close ??, jesteśmy w 2017 roku !!!. Nie ma też potrzeby drukowania („”), ponieważ tekst zostanie nadpisany
FSm

1
@Andro, zwróć uwagę na sygnaturę czasową i tagi? Pamiętam, że był to najbardziej niezawodny sposób na opróżnienie pliku na urządzeniach z Androidem.
Vlad

@Vlad Jeśli teraz nie ma potrzeby zamykania programu do pisania, może warto zaktualizować odpowiedź?
Linia

72

Nie wierzę, że musisz nawet pisać pusty ciąg do pliku.

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

9
Masz co do tego rację. Wszystkie odpowiedzi z napisem są błędne lub w najlepszym przypadku zbędne.
Markiz Lorne

33
A może właśnie new PrintWriter("filepath.txt").close();?
Supuhstar

1
cytat z dokumentacji java "Jeśli plik istnieje, zostanie obcięty do zerowego rozmiaru"
Pinkerton,

1
ale co zrobić, jeśli plik jest w trybie dołączania.
GURMEET SINGH

Człowieku, nie mogę uwierzyć, że przegapiłem prostą odpowiedź. Otwórz plik w trybie obcięcia. Nienawidzę trybu obcinania tak bardzo, że mi się wymknęło.

30

Potrzebujesz metody setLength () w klasie RandomAccessFile.


5
W rzeczywistości jest to jedyna poprawna odpowiedź, ponieważ nie usuwa pliku. Wszystkie inne odpowiedzi tak.
Markiz Lorne

Potrzebuję tego, ponieważ chciałbym wyczyścić plik dziennika utworzony przez bibliotekę logback-android . Jeśli ręcznie usunę plik dziennika, biblioteka nie będzie wystarczająco sprytna, aby utworzyć ją ponownie, jeśli istnieje dziennik do zapisania, dopóki ponownie nie uruchomię mojej aplikacji. Dlatego użyłem tej metody i pracy. Niewiele się uczyłem. Czy to nie jest najlepsze podejście? Proszę o poradę.
Yeung

co zabawne, mam problem z produkcją, ponieważ karta Intenso klasy 10 zawiesza się (i wymusza reset baterii), gdy wywołuję fileOnSdCard.setLength (0) dla aplikacji zainstalowanej z pliku .apk. Ich karta klasy 4 nigdy nie wykazywała problemu.
Poutrathor



6

A jak poniżej:

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

5

Po skopiowaniu z A do B otwórz ponownie plik A do trybu zapisu, a następnie zapisz w nim pusty ciąg


5

Jednym z najlepszych towarzyszących java jest Apache Projects i prosimy o zapoznanie się z nim. Operacje związane z plikami można znaleźć w projekcie Commons IO .

Poniższy jeden wiersz kodu pomoże nam uczynić plik pusty.

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

4

Tylko napisz:

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

2

Wpisz pusty ciąg do pliku, opróżnij i zamknij. Upewnij się, że program zapisujący pliki nie jest w trybie dopisywania. Myślę, że to powinno załatwić sprawę.


2

Jeśli nie musisz później korzystać z narzędzia do pisania, najkrótszym i najczystszym sposobem na to będzie:

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

1

przy użyciu: Nowa biblioteka Java 7 NIO, spróbuj

        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();

Powyższy kod sprawdza czy Directoty istnieje jeśli nie tworzy katalog, sprawdza czy plik istnieje jest tak zapisuje pusty string i opróżnia bufor, na końcu dostajesz writer wskazujący na pusty plik


0

Możesz użyć

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

Pamiętaj, aby nie używać

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

True w konstruktorze filewriter umożliwi dołączanie.


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

Witamy w SO! Użyj wbudowanych narzędzi do formatowania, aby kod był łatwiejszy do odczytania.
Michael L.

0

W przypadku try-with-resources program zapisujący zostanie automatycznie zamknięty:

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

Wszystko, co musisz zrobić, to otworzyć plik w trybie obcięcia. Każda klasa plików Java zrobi to automatycznie.


-2

możesz napisać ogólną metodę jako (jest za późno, ale poniższy kod pomoże tobie / innym)

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
To nie tworzy pustego pliku, tworzy plik z jednym bajtem zerowym.
Markiz Lorne
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.