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

  • Работа с файлами

    Как прочитать данные из файла

    Как прочитать данные из файла[Как прочитать данные из файла]

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

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

    1. Files.newBufferedReader (Java 8+)

    Первый способ – используя BufferedReader из Java 8:

    public class ReadFileBufferedReaderJava8 { public static void main(String[] args) { StringBuilder sb = new StringBuilder(); try (BufferedReader reader = Files.newBufferedReader(Paths.get("names.txt"))) { String line; while ((line = reader.readLine()) != null) { sb.append(line).append(System.lineSeparator()); } } catch (IOException e) { e.printStackTrace(); } System.out.println(sb); } } Подробнее ...

  • Работа с файлами

    Как узнать размер директории

    Как узнать размер директории[Как узнать размер директории]

    Иногда требуется узнать размер директории на файловой системе. В Java это можно сделать несколькими способами — с помощью стандартного API и внешних библиотек.

    Здесь мы рассмотрим различные способы узнать размер директории:

    • Используя сторонню библиотеку Apache Commons IO (FileUtils.sizeOfDirectory)
    • Используя стандартную библиотеку Java 8 (Files.walk)
    • Используя стандартную библиотеку Java 7 (FileVisitor)
    • Используя стандартную библиотеку Java 6

    1. Размер директории с помощью Apache Commons IO

    Это наиболее простой в использовании способ — достаточно воспользоваться одним методом из этой библиотеки. Но сначала её требуется подключить к проекту:

            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.7</version>
            </dependency>

    После этого, воспользуемся методом sizeOfDirectory:

    FileUtils.sizeOfDirectory(new File("/home/alex/java-lessons.ru"));

    В ответ вернётся размер директории в байтах:

    2. Размер директории с помощью Files.walk (Java 8+)

    Если вы не хотите подключать сторонние библиотеки, можно воспользоваться стандартным API. В Java 8 появился метод Files.walk, с помощью которого можно обойти все файлы в директории и подсчитать их размер:

    Path path = Paths.get("/home/alex/java-lessons.ru"); long size = 0; try (Stream<Path> walk = Files.walk(path)) { size = walk .filter(Files::isRegularFile) .mapToLong(p -> { try { return Files.size(p); } catch (IOException e) { System.out.printf("Невозможно получить размер файла %s%n%s", p, e); return 0L; } }) .sum(); } catch (IOException e) { System.out.printf("Ошибка при подсчёте размера директории %s", e); } System.out.println(size); Подробнее ...

  • Работа с файлами

    Как прочитать файл ресурсов из war приложения

    Как прочитать файл ресурсов из war приложения[Как прочитать файл ресурсов из war приложения]

    WAR (Web Archive) — это приложение JavaEE, упакованное в архив и готовое для разворачивания на сервере приложений. В этом файле находятся классы приложения, ресурсные файлы и служебные файлы. Как быть, если вам требуется прочитать файл ресурсов из этого приложения?

    Какие файлы можно прочитать из WAR архива

    Можно прочитать те файлы, которые в архиве расположены в директории WEB-INF/classes

    Как прочитать файл ресурсов из архива WAR

    Для того, чтобы прочитать контент ресурсного файла из war архива, сначала требуется получить InputStream этого файла:

    InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(path);

    Если вернувшийся объект не равен null, остаётся вычитать контент любым удобным способом. Например, таким:

    StringBuilder sb = new StringBuilder();
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(in))) {
        String line;
        while ((line = reader.readLine()) != null) {
            sb.append(line).append(System.lineSeparator());
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    
    System.out.println(sb.toString());

    Исходный код

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public class ReadFileFromWarArchive { public static void main(String[] args) { System.out.println(resourceToString("git.properties")); } public static String resourceToString(String path) { if (path == null) { return null; } InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(path); if (in == null) { return null; } StringBuilder sb = new StringBuilder(); try (BufferedReader reader = new BufferedReader(new InputStreamReader(in))) { String line; while ((line = reader.readLine()) != null) { sb.append(line).append(System.lineSeparator()); } } catch (IOException e) { e.printStackTrace(); } System.out.println(sb.toString()); return sb.toString(); } } Подробнее ...

  • Работа с файлами

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

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

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

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

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

    // запись в файл текстовой информации (файл перезаписывается)
    List<String> lines = Arrays.asList("Привет", "Мир");
    Path file = Paths.get("output.txt");
    Files.write(file, lines, StandardCharsets.UTF_8);

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

    // запись в файл текстовой информации (информация добавляется в конец файла) List<String> lines2 = Arrays.asList("Привет", "Мир"); Path file2 = Paths.get("output.txt"); Files.write(file2, lines, StandardCharsets.UTF_8, StandardOpenOption.APPEND); Подробнее ...

  • Работа с файлами

    Конвертирование File в Path и обратно

    Конвертирование File в Path и обратно[Конвертирование File в Path и обратно]

    Тип Path появился в Java 7. Он представляет собой абстракцию пути в файловой системе. Иногда требуется преобразовать Path в File и обратно.

    Конвертирование File в Path

    Чтобы сконвертировать File в Path, достаточно воспользоваться методом File.toPath:

    File file = new File("/home/alex/java-lessons.ru/test.txt");
    Path path = file.toPath();

    Конвертирование Path в File

    Чтобы сконвертировать Path в File, нужно воспользоваться методом Path.toFile:

    Path path2 = Paths.get("/home/alex/java-lessons.ru/test.txt");
    File file2 = path2.toFile();

    Исходный код

    import java.io.File; import java.nio.file.Path; import java.nio.file.Paths; public class FileToPath { public static void main(String[] args) { File file = new File("/home/alex/java-lessons.ru/test.txt"); Path path = file.toPath(); Path path2 = Paths.get("/home/alex/java-lessons.ru/test.txt"); File file2 = path2.toFile(); } } Подробнее ...

  • Работа с файлами

    Как удалить файл

    Как удалить файл[Как удалить файл]

    Удалить файл в Java можно несколькими способами: с помощью стандартного API и с помощью сторонних библиотек. В этой статье мы рассмотрим три способа:

    • с помощью Files.delete
    • с помощью Files.deleteIfExists
    • с помощью FileUtils.deleteQuietly

    Примечание 1: если вместо файла передан путь к директории, указанная директория будет удалена, если она пуста.

    Примечание 2: если вместо файла указана символическая ссылка, она будет удалена, но файл не будет затронут.

    Удаление файла с помощью Files.delete

    Первый способ удалить файл – это воспользоваться стандартным методом Files.delete:

    try {
        Files.delete(Paths.get("/home/alex/test"));
    }  catch (IOException x) {
        System.err.println(x);
    }

    Стоит заметить, что метод Files.delete может генерировать исключения, поэтому его придётся завернуть в блок try-catch. Например, если указанный файл не найден, будет сгенерировано исключение NoSuchFileException .

    Удаление файла с помощью Files.deleteIfExists

    Следующий способ – использовать метод Files.deleteIfExists, который возвращает true или false в зависимости от того, получилось ли удалить указанный файл:

    try {
        Files.deleteIfExists(Paths.get("/home/alex/test"));
    } catch (IOException e) {
        System.err.println(e);
    }

    Также метод Files.deleteIfExists отличается от Files.delete тем, что не выбрасывает исключение NoSuchFileException в случае, если файл не найден.

    Удаление файла с помощью FileUtils.deleteQuietly

    Следующий способ – использовать библиотеку Commons IO. Для этого нужно подключить библиотеку в проект:

    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.7</version>
    </dependency>

    И воспользоваться методом FileUtils.deleteQuietly:

    FileUtils.deleteQuietly(new File("/home/alex/test"));

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

    Исходный код

    import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; import java.nio.file.*; public class RemoveFile { public static void main(String[] args) { try { Files.delete(Paths.get("/home/alex/test")); } catch (IOException x) { System.err.println(x); } try { Files.deleteIfExists(Paths.get("/home/alex/test")); } catch (IOException e) { System.err.println(e); } FileUtils.deleteQuietly(new File("/home/alex/test")); } } Подробнее ...