Как удалить содержимое файла
Узнайте различные способы удаления содержимого файла без удаления файла.
1. Введение
В этом учебнике Мы увидим, как мы используем Java для удаления содержимого файла без удаления самого файла. Поскольку есть много простых способов сделать это, давайте рассмотрим каждый по одному.
2. Использование PrintWriter
Ява РаспечататьПисач класс расширяет Писатель класс. Он печатает отформатированную представление объектов в потоке текстового вывода.
Мы выполнить простой тест. Давайте создадим РаспечататьПисач например, указывая на существующий файл, удаляя существующее содержимое файла, просто закрывая его, а затем убедитесь, что длина файла пуста:
Кроме того, обратите внимание, что если нам не нужна РаспечататьПисач объект для дальнейшей обработки, это лучший вариант. Однако, если нам нужна РаспечататьПисач объект для дальнейших операций файла, мы можем сделать это по-другому:
3. Использование Файлрайтер
Ява ФайлРайтер является стандартным классом Java IO API, который предоставляет методы записи данных, ориентированных на характер, в файл.
Давайте теперь посмотрим, как мы можем сделать ту же операцию с помощью ФайлРайтер:
Точно так же, если нам нужна ФайлРайтер объект для дальнейшей обработки, мы можем назначить его переменной и обновить с пустой строкой.
4. Использование FileOutputStream
FileOutputStream Java — это выходной поток, используемый для записи данных byte в файл.
Теперь давайте удалим содержимое файла с помощью FileOutputStream:
5. Использование Apache Commons IO FileUtils
ИО- Apache Commons это библиотека, которая содержит классы утилиты, чтобы помочь с общими проблемами IO. Мы можем удалить содержимое файла с помощью одного из его классов утилиты – ФилеУтилс.
Чтобы увидеть, как это работает, давайте добавим ИО- Apache Commons зависимость от нашей пом.xml :
После этого возьмем быстрый пример, демонстрирующий удаление содержимого файла:
6. Использование файлов Java NIO
Мы также можем удалить содержимое файла с помощью java.nio.file.Files :
7. Использование Java NIO FileChannel
Java NIO FileChannel — это реализация NIO для подключения файла. Он также дополняет стандартный пакет Java IO.
8. Использование Гуавы
Guava — это библиотека с открытым исходным кодом на основе Java, которая предоставляет полезные методы для ведения операций в i/O. Давайте посмотрим, как использовать API Guava для удаления содержимого файла.
Во-первых, мы должны добавить Гуава зависимости в нашей пом.xml :
После этого рассмотрим быстрый пример удаления содержимого файла с помощью Guava:
9. Заключение
Подводя итог, мы видели несколько способов удаления содержимого файла без удаления самого файла.
Иногда возникают ситуации, когда надо произвести запись в файл, в котором уже находятся данные. Или просто удалить все содержимое. Рассмотрим, как выполнить очистку этого файла средствами Python 3.
Способы
Очистить файл в Python 3 можно следующими способами:
- При открытии использовать режим, в котором указатель находится в начале документа.
- Вручную переместить указатель в начальную позицию.
- Средствами операционной системы обнулить содержимое файла.
Рассмотрим эти варианты подробно.
При открытии
Когда файл открывается на запись, то указатель текущего положения в документе может быть расположен в начале или в конце документа. Если указатель в конце, то данные будут дописываться. Нас же интересует вариант, когда указатель расположен в начале.
Здесь w – указывает режим открытия файла на запись в текстовом режиме с размещением указателя в начале. После выполнения этого кода, если существовал указанный файл, то содержимое его очистится. Если его не было, то создастся новый пустой.
Перед закрытием, можно было добавить информацию. Она будет записана с начала файла, а не дописана в конец.
Если надо записывать данные в бинарный файл, то следует использовать режим “wb”.
Если же наоборот, нам нужно добавить информацию в конец файла. При этом старые данные чтобы остались. В этом случае к режиму следует добавить символ +. Режим открытия текстового документа будет “w+”, а бинарного “wb+”.
Дополнительную информацию по режимам открытия можно получить в отдельной статье на нашем сайте.
Перемещение указателя
Если мы открыли файл на запись и не знаем, в каком месте находится указатель. Возможно, мы уже записали какие то данные. Мы можем просто переместить указатель в начало и закрыть его. В этом случае документ будет пустым.
В этом примере открытие сделали специально в режиме дозаписи. После закрытия, даже если в файле были данные, они удалятся.
Вот еще пример, здесь мы записываем данные, потом переносим указатель в начало. После этого еще раз производим запись. В итоге, в конце работы, в файле будет только последняя сделанная запись. Те данные, которые были внесены вначале, благополучно удалятся.
Средствами ОС
Для очистки с помощью средств операционной системы воспользуемся стандартной библиотекой os. Вначале её надо подключить с помощью инструкции import os.
На linux должно пройти следующим образом.
Можно воспользоваться командами cp или cat. Вот пример решения с помощью cat.
I have a hardlinked a file, and use File.WriteAllText , it seems as if this sometimes (?) deletes the file since the hardlinks are not kept updated.
I recommend you to do not do that if another operation will access the file right after this operation. I faced issue where the file didn't get closed write after this line of code, and cause IO exceptions of file is in use , so i recommend you to handle it manually through file stream
This is what I did to clear the contents of the file without creating a new file as I didn't want the file to display new time of creation even when the application just updated its contents.
Olive, if it answers your question, would you please mark it as an answer. However, if the proposed solution doesn't work in your case, please let us know even then.
+1 This is the only way to first acquire a file lock, check file attributes safely and finally clear the content.
This is exactly what i needed myself. i need to have a service communicate to an application for simple line-by-line messages to a user, and this allows me to keep my file lock and clear the messages to prevent the service app from inserting and inadvertently dropping messages or duplicating messages.
Wouldn't it be advisable to create the filestream in a using block? That would automatically close the stream as well.
Use FileMode.Truncate everytime you create the file. Also place the File.Create inside a try catch .
The easiest way is:
However, I recommend you use FileStream because the first solution can throw UnauthorizedAccessException
Try using something like
Creates or overwrites a file in the specified path.
Not a good idea for the question asked: Does not remove the data already in the file - it only overwrites it to the length of the new data, so if old data > new data you will end up with mix of the two.
The simplest way to do this is perhaps deleting the file via your application and creating a new one with the same name. in even simpler way just make your application overwrite it with a new file.
There can be problems if you try to create the file shortly after deletion. Sometimes the OS fails to create file as it "thinks" the file still exists.
@Dmitry Lobanov - [I know this is an old thread]. I do not accept that the operating system sometimes thinks a file still exists, unless there is a good reason. It would be a very poor OS if it did. MUCH more likely is that something still has a handle open on the existing file. It could even be your own software if you are not careful in closing files (by using 'using' for example to ensure disposal). Could be the anti-virus too. Agree with your conclusion though. I think FileMode.Truncate is the way to go.
Удаляет один или несколько файлов. Эта команда выполняет те же действия, что и команда Erase .
команда del также может запускаться из консоли восстановления Windows с использованием различных параметров. дополнительные сведения см. в разделе Windows среды восстановления (WinRE).
Если удалить файл с диска с помощью Del , вы не сможете получить его.
Синтаксис
Параметры
- файлы r только для чтения
- h скрытые файлы
- я не проиндексированные файлы содержимого
- системные файлы
- файлы , готовые к архивации
- l точки повторного анализа
- - Используется в качестве префикса, означающего "not"
Комментарии
FileName, Delete (Y/N)?
Чтобы подтвердить удаление, нажмите клавишу Y. Чтобы отменить удаление и отобразить следующее имя файла (если указана группа файлов), нажмите клавишу N. Чтобы закрыть команду Del , нажмите клавиши CTRL + C.
Если вы отключаете расширение команды, параметр /s отображает имена всех файлов, которые не были найдены, а не отображает имена удаляемых файлов.
Если указать определенные папки в параметре, все включаемые файлы также будут удалены. Например, если нужно удалить все файлы в папке \ворк , введите:
Можно использовать подстановочные знаки ( * и ?) для удаления нескольких файлов за раз. Однако во избежание непреднамеренного удаления файлов следует использовать подстановочные знаки с осторожностью. Например, если ввести следующую команду:
Are you sure (Y/N)?
Чтобы удалить все файлы в текущем каталоге, нажмите клавишу Y и нажмите клавишу ВВОД. Чтобы отменить удаление, нажмите клавишу N и нажмите клавишу ВВОД.
Прежде чем использовать подстановочные знаки с командой Del , используйте те же подстановочные знаки с командой dir , чтобы получить список всех файлов, которые будут удалены.
Примеры
Чтобы удалить все файлы в папке с именем Test на диске C, введите следующую команду:
Чтобы удалить все файлы с расширением имени файла .bat из текущего каталога, введите:
Удаляет один или несколько файлов. Эта команда выполняет те же действия, что и команда Erase .
команда del также может запускаться из консоли восстановления Windows с использованием различных параметров. дополнительные сведения см. в разделе Windows среды восстановления (WinRE).
Если удалить файл с диска с помощью Del , вы не сможете получить его.
Синтаксис
Параметры
- файлы r только для чтения
- h скрытые файлы
- я не проиндексированные файлы содержимого
- системные файлы
- файлы , готовые к архивации
- l точки повторного анализа
- - Используется в качестве префикса, означающего "not"
Комментарии
FileName, Delete (Y/N)?
Чтобы подтвердить удаление, нажмите клавишу Y. Чтобы отменить удаление и отобразить следующее имя файла (если указана группа файлов), нажмите клавишу N. Чтобы закрыть команду Del , нажмите клавиши CTRL + C.
Если вы отключаете расширение команды, параметр /s отображает имена всех файлов, которые не были найдены, а не отображает имена удаляемых файлов.
Если указать определенные папки в параметре, все включаемые файлы также будут удалены. Например, если нужно удалить все файлы в папке \ворк , введите:
Можно использовать подстановочные знаки ( * и ?) для удаления нескольких файлов за раз. Однако во избежание непреднамеренного удаления файлов следует использовать подстановочные знаки с осторожностью. Например, если ввести следующую команду:
Are you sure (Y/N)?
Чтобы удалить все файлы в текущем каталоге, нажмите клавишу Y и нажмите клавишу ВВОД. Чтобы отменить удаление, нажмите клавишу N и нажмите клавишу ВВОД.
Прежде чем использовать подстановочные знаки с командой Del , используйте те же подстановочные знаки с командой dir , чтобы получить список всех файлов, которые будут удалены.
Примеры
Чтобы удалить все файлы в папке с именем Test на диске C, введите следующую команду:
Чтобы удалить все файлы с расширением имени файла .bat из текущего каталога, введите:
Читайте также: