Класс StandardOpenOption
Класс StandardOpenOption представляет собой перечисление
(enum), которое описывает стандартные опции открытия файлов
для методов класса Files и каналов ввода-вывода.
Каждая константа этого перечисления указывает,
каким образом файл должен быть открыт: только для чтения,
только для записи, для чтения и записи, с созданием нового файла,
с перезаписью существующего, с добавлением данных в конец
и так далее. Опции можно комбинировать друг с другом,
передавая их в метод в виде набора.
Синтаксис
StandardOpenOption.READ
StandardOpenOption.WRITE
StandardOpenOption.APPEND
StandardOpenOption.TRUNCATE_EXISTING
StandardOpenOption.CREATE
StandardOpenOption.CREATE_NEW
StandardOpenOption.DELETE_ON_CLOSE
StandardOpenOption.SPARSE
StandardOpenOption.SYNC
StandardOpenOption.DSYNC
В первом параметре метода Files.newInputStream или
Files.newOutputStream можно передать одну опцию
или несколько опций сразу. Каждая константа определяет
свое правило открытия файла.
Пример
Давайте откроем файл только для чтения с помощью опции
READ:
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
public class Main
{
public static void main(String[] args) throws IOException
{
Path path = Path.of("test.txt");
InputStream in = Files.newInputStream(
path,
StandardOpenOption.READ
);
System.out.println("File opened for reading");
in.close();
}
}
Результат выполнения кода:
"File opened for reading"
Пример
Давайте откроем файл для записи, создав его, если он не существует, и добавив данные в конец:
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
public class Main
{
public static void main(String[] args) throws IOException
{
Path path = Path.of("test.txt");
OutputStream out = Files.newOutputStream(
path,
StandardOpenOption.CREATE,
StandardOpenOption.APPEND
);
out.write("12345".getBytes());
out.close();
System.out.println("Data appended");
}
}
Результат выполнения кода:
"Data appended"
Пример
Давайте откроем файл для чтения и записи одновременно,
используя комбинацию опций READ и WRITE:
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.SeekableByteChannel;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
public class Main
{
public static void main(String[] args) throws IOException
{
Path path = Path.of("test.txt");
SeekableByteChannel channel = Files.newByteChannel(
path,
StandardOpenOption.READ,
StandardOpenOption.WRITE
);
ByteBuffer buffer = ByteBuffer.allocate(5);
channel.read(buffer);
buffer.flip();
System.out.println("Read bytes: " + buffer.remaining());
channel.close();
}
}
Результат выполнения кода:
"Read bytes: 5"
Смотрите также
-
класс
FileInputStream,
который читает байты из файла -
класс
FileOutputStream,
который записывает байты в файл -
класс
InputStream,
который представляет поток ввода -
класс
StandardCharsets,
который содержит стандартные кодировки