Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

java-lekcii-2016-01-17 / presentation-nov-14

.docx
Скачиваний:
15
Добавлен:
27.03.2016
Размер:
23.65 Кб
Скачать

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

package ru.mami;

import java.io.IOException;

import java.nio.file.Files;

import java.nio.file.Path;

import java.nio.file.Paths;

import java.nio.file.StandardOpenOption;

import java.util.Arrays;

import java.util.List;

public final class Main {

public static void main(String[] args) {

// получение адреса папки текущего пользователя в виде строки

String userHome = System.getProperty("user.home");

System.out.println(userHome); // C:\Users\<имя текущего пользователя>

// перевод адреса из строки в тип Path, который используется для работы

// с файлами и папками

Path userDir = Paths.get(userHome);

// добавление еще одного или нескольких объектов в конец адреса, т.е.

// customers = C:\Users\<пользователь>\nov-14\customers.txt

Path customers = userDir.resolve("nov-14/customers.txt");

// Во время работы с файлами могут возникнуть ошибки ввода-вывода,

// которые могут оказать серьезное влияние на работу компьютера в целом

// и программы в частности. Для обработки ошибок в Java используются

// блоки try ... catch. Несмотря на то, что ни на лабораторных, ни на

// экзамене никаких проблем с файлами не возникнет, не прописывать эти

// блоки нельзя (программа без них не заработает)

try {

// если папка, в которой должен лежать файл customers.txt не

// существует, создать ее и все ее родительские папки

if (!Files.exists(customers.getParent())) {

Files.createDirectories(customers.getParent());

}

// запись в файл

// первый параметр - файл, в который будут записаны данный

// второй параметр - сами строки

// Метод Files.write принимает в качестве второго параметра объект,

// реализующий интерфейс Iterable с объектами, реализуюшими

// интерфейс CharSequence. Метод Arrays.asList() возвращает список

// (объект, реализующий интерфейс List) и принимает в качестве

// параметра либо массив, либо любое количество объектов (в данном

// случае строк), записанных через запятую. Таким образом, метод

// Arrays.asList() можно использовать для создания второго параметра

// для метода Files.write()

// остальные (необязательные) параметры - режимы открытия файла.

// CREATE означает, что файл будет создан, если он отсутствует, а

// APPEND - что новые строки будут дописаны в конец файла (если бы

// APPEND не был прописан, этот вызов заменил бы первые две строки

// файла на 12 и 34)

Files.write(customers, Arrays.asList("12", "34"),

StandardOpenOption.CREATE,

StandardOpenOption.APPEND);

// чтение всех строк файла в список строк

// списки (классы, реализующие интерфейс List) можно рассматривать

// как более продвинутую форму массивов, т.к. они предоставляют

// большое количество функций, облегчающих работу со

// сгруппированными данными, а некоторые даже являются обертками над

// массивами

List<String> lines = Files.readAllLines(customers);

// вывод содержимого файла в консоль

for (String line : lines) {

System.out.println(line);

}

// добавление строки

lines.add("asdf");

// запись измененных строк в файл

// StandardOpenOption.TRUNCATE_EXISTING = очистить перед записью

Files.write(customers, lines, StandardOpenOption.TRUNCATE_EXISTING);

} catch (IOException e) {

e.printStackTrace();

}

}

}

Работа с регулярными выражениями

Регуля́рные выраже́ния (англ. regular expressions) — формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов (символов-джокеров, англ. wildcard characters). По сути это строка-образец (англ. pattern, по-русски её часто называют «шаблоном», «маской»), состоящая из символов и метасимволов и задающая правило поиска.

package ru.mami;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public final class Main {

public static void main(String[] args) {

String line = "admin|qwerty";

// Pattern - подготовленное к работе регулярное выражение

// () - группа, используется для получения части выражения (см. далее)

// \\w - любая цифра, любая (английская) буква или символ подчеркивания

// + - одно или более совпадение подряд

// \\| - символ "|"

Pattern userPattern = Pattern.compile("(\\w+)\\|(\\w+)");

// Matcher - движок, сопостовляющий строку с шаблоном

Matcher userMatcher = userPattern.matcher(line);

// проверка, соответствует ли строка line шаблону userPattern

if (userMatcher.matches()) {

// если соответствует, вывод всех групп на экран

// группа 0 - все, что соответствует регулярному выражению, есть

// всегда

// группы 1+ - группы, выделенные в регулярном выражении круглыми

// скобками в том порядке, в котором они встречаются в выражении

System.out.println(userMatcher.group(0));

// admin|qwerty

System.out.println(userMatcher.group(1));

// admin

System.out.println(userMatcher.group(2));

// qwerty

}

// Альтернативный подход, применяемый в случае, когда нужно выяснить

// только соответствует ли вся строка регулярному выражению

if (Pattern.matches("\\w+", "Lorem ipsum")) {

System.out.println("passed");

} else {

System.out.println("failed");

}

// Пример сверху выводит failed, т.к. в строке Lorem ipsum есть пробел

}

}

Упражнения

  • Создать новый проект Gradle

  • Создать оконное приложения с полем вывода информации, кнопкой, полями ввода имени пользователя и пароля и кнопкой.

  • По нажатию кнопки проверять поля на соответствие регулярному выражению \\w+

  • Если хотя бы одно из полей не соответствует, писать об этом в поле вывода информации

  • Программно создать файл users.txt в котором хранить имена и пароли пользователей, разделенные символом «|»

  • Если оба поля соответствуют регулярному выражению, искать такого пользователя с таким паролем в базе

  • Если имя пользователя и пароль нашлись, сообщить пользователю об успешной аутентификации

  • Если нашлось только имя пользователя, сообщить о неправильно введенном пароле

  • Если имя пользователя не нашлось, добавить такого пользователя с таким паролем в файл

  • Собрать *.jar

Соседние файлы в папке java-lekcii-2016-01-17