В этой статье я представляю некоторых случаях использование, простой для чтения и записи текстовых файлов с Java.
Чтение
Приведенный ниже код показывает, как получить все содержимое текстового файла, как String
.
import static java.nio.charset.StandardCharsets.UTF_16; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class ReadingAllContent { public static void main(String... args) { try { Path path = Paths.get("text.txt"); byte[] bytes = Files.readAllBytes(path); String content = new String(bytes, UTF_16); System.out.println(content); } catch (IOException e) { e.printStackTrace(); } } }
С Java 11 или более поздней версии кода становится проще с использованием метода Файлы#Строка чтения
:
Path path = Path.of("text.txt"); String content = Files.readString(path, UTF_16);
Также можно вернуть все строки файла в виде списка String
методом Files#readAllLines
.
Path path = Paths.get("text.txt"); Listlines = Files.readAllLines(path, UTF_16); lines.forEach(System.out::println);
Эти методы носят все содержимое файла в памяти только один раз, поэтому должны быть использованы только тогда, когда файл не такой большой.
Для чтения больших файлов, строка за строкой, мы можем использовать метод Files#lines
возвращает Поток
/, которая считывает строки, как расходуется.
import static java.nio.charset.StandardCharsets.UTF_16; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.stream.Stream; public class ReadingAsStream { public static void main(String... args) { Path path = Paths.get("text.txt"); try (Streamstream = Files.lines(path, UTF_16)) { stream.forEach(System.out::println); } catch (IOException e) { e.printStackTrace(); } } }
Поток
/возвращено должен быть закрыт, когда не будет более полезным, поэтому, в примере я использовал try-with-resource что гарантирует его закрытия.
Написанное
Код ниже показывает, как написать String
в файл.
import static java.nio.charset.StandardCharsets.UTF_16; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class WritingString { public static void main(String... args) { try { Path path = Paths.get("text.txt"); String content = "abc"; byte[] bytes = content.getBytes(UTF_16); Files.write(path, bytes); } catch (IOException e) { e.printStackTrace(); } } }
С Java 11 или более поздней версии кода становится проще с использованием метода Файлы#Запись
.
Path path = Path.of("text.txt"); Files.writeString(path, "abc", UTF_16);
Метод Files#write
также принимает список String
в качестве аргумента.
Path path = Paths.get("text.txt"); Listlines = Arrays.asList("a", "b", "c"); Files.write(path, lines, UTF_16);
В этом случае, каждая String
список будет написано, как новую строку в файл.
Примечание 1: Выбор charset
В приведенных выше примерах я провел Charset
UTF-16 явно только для того чтобы показать, что это возможно, потому что это не всегда необходимо.
Метод Files#readString
, например, может быть использовано так:
Path path = Paths.get("text.txt"); String content = Files.readString(path);
В данном случае кодировка используется по умолчанию, будет UTF-8, и то же самое для методов, как показано ниже:
Path path = Paths.get("text.txt"); String a = Files.readString(path); Listb = Files.readAllLines(path); Stream c = Files.lines(path); Files.writeString(path, "abc"); Files.write(path, Arrays.asList("a", "b", "c"));
Уже в методе String#getBytes
если значение не указано явно, то используется кодировка по умолчанию платформы. Для получения charset по умолчанию, вы можете использовать метод ниже:
Charset charset = Charset.defaultCharset();
Наконец, класс StandardCharsets
есть только константы для наборов символов, требуемых для реализации платформы Java. Если вам нужна кодировка не определяется в этот класс, можно получить следующим образом:
Charset charset = Charset.forName("UTF-32");
Если кодировка желаемого поддерживается JVM, экземпляр Charset
возвращается, в противном случае будет сгенерировано исключение.
Примечание 2: Другие варианты
Методы ввода Files#writeString
и Files#write
также принимают дополнительные опции.
По умолчанию они создадут новый файл, если он не существует или sobrescreverão содержимое существующего файла, но это можно изменить это поведение.
Рассмотрим код ниже:
import static java.nio.file.StandardOpenOption.APPEND; import static java.nio.file.StandardOpenOption.CREATE; import static java.nio.file.StandardOpenOption.CREATE_NEW; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class WritingWithOptions { public static void main(String... args) throws IOException { byte[] content = "abc".getBytes(); /* 1 */ Files.write(Paths.get("a.txt"), content, APPEND); /* 2 */ Files.write(Paths.get("b.txt"), content, CREATE, APPEND); /* 3 */ Files.write(Paths.get("c.txt"), content, CREATE_NEW); } }
Пример 1 взимается content
в существующий файл и выдаст исключение, если файл не существует.
Пример 2 он же, как первый, но создаст новый файл, если он существует, а не бросать исключение.
Уже в пример 3 он всегда будет пытаться создать новый файл и выдаст исключение, если файл уже существует.
Есть и другие варианты, доступные в классе StandardOpenOption
, обратитесь к документации, чтобы узнать больше.
Завершение
Есть и другие способы чтения и записи файлов в Java и понимание методов выше, является хорошей отправной точкой, прежде чем отправиться в более сложных случаях.
Если вы обнаружите какие-либо ошибки или какие-либо дополнительная информация, обязательно использовать комментарии.
Оригинал: “https://dev.to/wldomiciano/como-ler-e-escrever-arquivos-de-texto-com-java-3lb9”