Java file write windows

Java create and write to a file

In Java, we can use Files.write to create and write to a file.

The Files.write also accepts an Iterable interface; it means this API can write a List to a file.

Short History
Before Java 7, for writing bytes (image) to a file, we use FileOutputStream ; for writing characters (text) to a file, we use FileWriter , and usually wrapped by a BufferedWriter to gain performance.

  • In Java 7, there is a new NIO class named java.nio.file.Files , and we can use Files.write() to write both bytes and characters.
  • In Java 8, we can use Files.newBufferedWriter(path) to create a BufferedWriter .
  • In Java 11, there is a new Files.writeString API to write string directly to a file.

1. Create and write to a file – Files.write

1.1 Before Java 7, we can use the classic FileWriter and BufferedWriter to write text to a file.

In Java 7 and above, we can use one line Files.write to write a text to a file, and we also worry-free about closing the opened resource (file) because the Files.write will auto close the opened resource.

1.2 The below example uses Files.write to create and write a String to a file.

Run the 1st time, and we created a file named aaa.txt .

Run the 2nd time, we will override the file content.

For append mode, we can define both StandardOpenOption.CREATE and StandardOpenOption.APPEND .

Run the 3rd time, this time with append mode enabled, we will append the new content to the end of the file.

1.3. The Files.write also support Iterable , it means we can pass a List to write multiple lines to a file.

2. Java 11 – Files.writeString

In Java 7, we need to convert the String into a byte[] before passing it to Files.write .

In Java 11, we can use the new API named Files.writeString to write a String or text directly to a file.

3. FileWriter + BufferedWriter

3.1 Before Java 7, the FileWriter + BufferedWriter combination is a standard solution for creating and writing characters or text to a file.

3.2 In Java 8, we can use the Files.newBufferedWriter to directly create a BufferedWriter object.

P.S There is nothing wrong with the above FileWriter + BufferedWriter method to write a file, just the Files.write provides more clean and easy to use API.

4. FileOutputStream

In Java, we use FileOutputStream to write raw bytes to a file, like an image.

Как создать файл в Java?

Обработка файлов в Java необходима для выполнения различных задач, таких как создание, чтение, запись и т. д. В этой статье я расскажу вам, как создать файл в Java с использованием различных методов.

Одна из главных причин популярности Java – независимость от платформы. Java по-прежнему является актуальным языком программирования, который не имеет признаков снижения популярности, и поэтому его стоит изучать. Большинство разработчиков выбирают его как свой первый язык программирования, потому что его легко выучить.

Читайте также:  Printing printer file windows

Поток выполнения Java-программы

Все языки программирования высокого уровня (также называемые третьим поколением) позволяют писать программы на языке, аналогичном (хотя и гораздо более простом), чем естественный язык. Программа высокого уровня называется исходным кодом.

Что такое файл в Java?

Файл – это не что иное, как простое хранилище данных на языке Java. Файловая система может реализовывать ограничения для определенных операций, таких как чтение, запись и выполнение. Эти ограничения известны как права доступа.

При чтении файла в Java мы должны знать класс файлов Java. Класс Java File представляет файлы и имена каталогов в абстрактной манере. Класс File имеет несколько методов для работы с каталогами и файлами, таких как создание новых каталогов или файлов, удаление и переименование каталогов или файлов и т. д. Объект File представляет фактический файл / каталог на диске.

Теперь давайте разберемся с различными методами создания файла.

Методы для создания файла в Java

1. Создайте файл с классом java.io.File

Вам нужно использовать метод File.createNewFile(). Этот метод возвращает логическое значение:

  • истина, если файл выполнен.
  • false, если файл уже существует или операция по какой-то причине не открывается.

Этот метод также генерирует исключение java.io.IOException, когда он не может создать файл.

Когда мы создаем объект File, передавая имя файла, он может быть с абсолютным путем, или мы можем предоставить только имя файла, или мы можем предоставить относительный путь. Для неабсолютного пути объект File пытается найти файлы в корневом каталоге проекта.

Если мы запустим программу из командной строки, для неабсолютного пути объект File попытается найти файлы из текущего каталога. Экземпляры класса File являются неизменяемыми; то есть, после создания абстрактный путь, представленный объектом File, никогда не изменится.

Теперь давайте рассмотрим небольшой пример и разберемся, как он работает.

Пожалуйста, обратите внимание, что этот метод будет только создавать файл, но не записывать в него никакого содержимого. Теперь давайте двигаться дальше и рассмотрим следующий метод.

2. Создайте файл с классом java.io.FileOutputStream

Если вы хотите создать новый файл и в то же время, если хотите записать в него некоторые данные, вы можете использовать метод записи FileOutputStream. В Java FileOutputStream является классом потока байтов. Чтобы записать данные в файл, вы должны преобразовать данные в байты, а затем сохранить их в файл.

Класс FileOutputStream хранит данные в виде отдельных байтов. Может использоваться для создания текстовых файлов. Файл представляет собой хранилище данных на втором носителе, таком как жесткий диск или компакт-диск. Метод FileOutputStream.write() автоматически создает новый файл и записывает в него содержимое.

3. Создайте файл с помощью Java.nio.file.Files – Java NIO

Files.write() – лучший способ создать файл, и он должен быть вашим предпочтительным подходом в будущем, если вы его еще не используете. Это хороший вариант, потому что нам не нужно беспокоиться о закрытии ресурсов ввода-вывода. Каждая строка представляет собой последовательность символов и записывается в файл последовательно, каждая строка заканчивается разделителем строк платформы.

public static Path createFile(Path path, FileAttribute . attrs) throws IOException

Создает новый и пустой файл, и если файл уже существует, то будет ошибка.

путь – путь для создания файла.

attrs – необязательный список атрибутов файла, устанавливаемых атомарно при создании.

Далее, давайте посмотрим на создание временного файла.

4. Java также может создавать временные файлы

Создание временного файла в java может потребоваться во многих сценариях, но в основном это происходит во время модульных тестов, где вы не хотите сохранять результаты. Как только тестовый пример закончен, вас не волнует содержимое файла.

Создание временного файла с использованием java.io.File.createTempFile()

с использованием NIO

Для создания временного файла используются следующие два метода.

Читайте также:  Операционные системы windows пиктограммы

1. createTempFile(Path, String, String, FileAttribute … attrs) – создает файл tmp в указанном каталоге.

Вышеуказанный метод принимает четыре аргумента.

Путь -> указать каталог, в котором будет создан файл.

Строка -> чтобы упомянуть префикс имени файла. Используйте ноль, чтобы избежать префикса.

Строка -> чтобы упомянуть суффикс имени файла. т.е. расширение файла. Используйте null, чтобы использовать .tmp в качестве расширения.

attrs -> Это необязательно, чтобы упоминать список атрибутов файла, чтобы установить атомарно при создании файла

Например. Files.createTempFile(path,null, null); – создает временный файл с расширением .tmp по указанному пути

2. createTempFile(String, String, FileAttribute ) – создает временный файл во временном каталоге по умолчанию системы / сервера.

Как записать данные в файл

В этой статье мы рассмотрим различные способы записи текстовой и бинарной информации в файл, используя стандартные API Java.

Запись текста в файл (Java 7 и выше)

Первый способ годится, если вы используете Java 7 и выше. Здесь используется класс Paths, который был добавлен в Java 7. Данный код перезапишет информацию в файле, если тот уже существует.

Если же вам нужно добавить текст в конец файла, укажите дополнительную опцию StandardOpenOption.APPEND:

Запись бинарной информации в файл

Если вам требуется записать не текстовые данные, а бинарные данные, используйте следующий пример. В качестве бинарных данных может выступать любой массив байтов (например, байтовое представление картинки или любого другого файла).

Для того, чтобы добавить информацию в конец файла, не перезаписывая его полностью, ипользуйте этот код:

Если же вы используете Java 6 ниже, воспользуйтесь следующими примерами.

Запись текста в файл (Java 6)

Этот код запишет данные в файл (причём если файл существует, данные в нём будут перезаписаны).

Если вам нужно дописать текст в конец файла, используйте следующий код:

Для записи бинарных данных в файл в Java 6 используйте следующий код (информация в файле перезапишется):

Для добавления бинарных в конец файла в Java используйте следующий код:

Резюме

В этой статье мы рассмотрели различные способы записи в файл текстовой и бинарной информации. Данные примеры используют стандартные возможности Java и не требуют подключения дополнительных библиотек.

Concurrent file write in Java on Windows

What happens when you concurrently open two (or more) FileOutputStreams on the same file?

Some platforms, in particular, allow a file to be opened for writing by only one FileOutputStream (or other file-writing object) at a time.

I’m guessing Windows isn’t such a platform, because I have two threads that read some big file (each one a different one) then write it to the same output file. No exception is thrown, the file is created and seems to contain chunks from both input files.

  • Is this true for Unix, too?
  • And since I want the behaviour to be the same (actually I want one thread to write correctly and the other to be warned of the conflict), how can I determine that the file is already opened for writing?

4 Answers 4

There’s not a reliable, cross-platform way to be passively notified when a file has another writer—i.e., raise an exception if a file is already open for writing. There are a couple of techniques that help you actively check for this, however.

If multiple processes (which can be a mix of Java and non-Java) might be using the file, use a FileLock . A key to using file locks successfully is to remember that they are only «advisory». The lock is guaranteed to be visible if you check for it, but it won’t stop you from doing things to the file if you forget. All processes that access the file should be designed to use the locking protocol.

If a single Java process is working with the file, you can use the concurrency tools built into Java to do it safely. You need a map visible to all threads that associates each file name with its corresponding lock instance. The answers to a related question can be adapted easily to do this with File objects or canonical paths to files. The lock object could be a FileOutputStream , some wrapper around the stream, or a ReentrantReadWriteLock .

Читайте также:  Xampp для windows x32

Работа с файлами в Java

Квест Java Syntax Pro еще в разработке

Сейчас мы вычитываем лекции и работаем над задачами. Если заметили ошибки — пишите в комментариях: всё учтем перед релизом. Спасибо!

1. Класс Files

Чтобы работать с файлами, есть шикарный утилитный класс — java.nio.file.Files . У него есть методы просто на все случаи жизни. Все методы этого класса статические и работают с объектами типа Path. Методов очень много, поэтому мы рассмотрим только основные:

Метод Описание
Создает новый файл с путем path
Создает новую директорию
Создает несколько директорий
Создает временный файл
Создает временную директорию
Удаляет файл или директорию, если она пуста
Копирует файл
Перемещает файл
Проверяет, что путь — это директория, а не файл
Проверяет, что путь — это файл, а не директория
Проверяет, что объект по заданному пути существует
Возвращает размер файла
Возвращает все содержимое файла в виде массива байт
Возвращает все содержимое файла в виде строки
Возвращает все содержимое файла в виде списка строк
Записывает в файл массив байт
Записывает в файл строку
Возвращает коллекцию файлов (и поддиректорий) из заданной директории

2. Создание файлов и директорий

Файлы и директории создавать очень просто. Убедимся на примерах:

Код Примечание
Создает файл
Создает директорию
Создает директорию и все нужные поддиректории, если их не существует.

3. Копирование, перемещение и удаление

Копировать, перемещать и удалять файлы так же легко. На директории это тоже распространяется, но они должны быть пустые.

Код Примечание
Копирует файл
Перемещает и переименовывает файл
Удаляет файл

4. Проверка типа файла и факта существования

Когда у вас есть какой-то путь, полученный извне, вы бы хотели знать, это файл или директория. Ну и вообще: существует такой файл/директория или нет?

Для этого тоже есть специальные методы. Так же можно легко узнать длину файла:

Код Примечание

5. Работа с содержимым файла

И наконец, есть целая серия методов, которые позволяют легко прочитать или записать содержимое файла. Пример:

Код Описание
Читаем содержимое файла в виде списка строк.

Выводим строки на экран

6. Получение содержимого директории

Остался еще самый интересный метод — получение файлов и поддиректорий в заданной директории.

Для этого есть специальный метод — newDirectoryStream() , который возвращает специальный объект типа DirectoryStream

. У него есть итератор(!), и с помощью этого итератора можно получить все файлы и поддиректории заданной директории.

Выглядит проще, чем кажется:

Получаем объект со списком файлов
Цикл по списку файлов

Код Описание

обладает двумя свойствами. Во-первых, у него есть итератор, который возвращает пути к файлам, и мы можем этот объект использовать внутри цикла for-each .

А во-вторых, этот объект является потоком данных, и его нужно закрывать с помощью метода close() , ну или использовать внутри try -with-resources.

7. Метод Files.newInputStream

Начиная с Java 5 классы FileInputStream и FileOutputStream стали считаться устаревшими. Одним из их минусов было то, что при создании объекта этих классов сразу происходит создание файлов на диске. И потенциально выбрасываются все ошибки, связанные с созданием файлов.

В последствии это было признано не самым хорошим решением. Поэтому для создания объектов-файлов рекомендуется использовать методы утилитного класса – java.nio.Files .

Вот сравнение старого подхода к созданию файлов и нового:

Оцените статью