Рубрики
Без рубрики

Как читать и писать текстовые файлы с Java

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

В этой статье я представляю некоторых случаях использование, простой для чтения и записи текстовых файлов с 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");
List lines = 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 (Stream stream = 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");
List lines = 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);

List b = 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”