report_lab8
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ,
СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)
Факультет Инфокоммуникационных сетей и систем
Кафедра Защищенных систем связи
Дисциплина Разработка защищенного программного обеспечения
ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №8
Обработка текстовых файлов
(тема отчета)
Направление/специальность подготовки
10.03.01 Информационная безопасность
(код и наименование направления/специальности)
Студент:
(Ф.И.О., № группы) (подпись)
Преподаватель:
Цветков А.Ю.
(Ф.И.О) (подпись)
Цель лабораторной работы
Освоить работу с текстовыми файлами с использованием средств Java
Используемое программное обеспечение
JDK 1.5 и выше.
Интегрированная среда разработки на Java.
Задание на лабораторную работу
Написать программу, которая выполняет указанные в задании действия над файлом и записывает результат в другой файл
Адреса файлов подаются программе в виде аргументов:
args[0] - адрес файла для чтения исходного текста
args[1] - адрес файла для записи результата
Проверить правильность работы программы
Собрать исполняемый jar и отправить на проверку
Основное задание:
Клонировать слова, если в них содержится символ 'к' в верхнем или нижнем регистре (Пример: символ 'в'. "Во_дворе_стоит_дом" => "ВоВо_дворедворе_стоит_дом")
Инвертировать весь текст (Дом_стоит_во_дворе => еровд_ов_тиотс_моД)
Листинг программного кода основного задания
import java.io.*;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) throws Exception {
FileReader fileReader = null;
FileWriter fileWriter = null;
String filetoread = args[0];
String filetowrite = args[1];
try {
// У FileReader есть конструктор, принимающий адрес
// файла, который необходимо читать
fileReader = new FileReader(filetoread);
// *Тут работаем с файлом*
int x = 0;
StringBuilder word = new StringBuilder();
char symbol;
ArrayList<String> line = new ArrayList<String>();
//Считываем файл до его конца и добавляем слова в лист
while((x = fileReader.read()) != -1) {
if ((char) x != '_'){
symbol = (char) x;
word.append(symbol);
} else {
line.add(word.toString());
word.setLength(0);
}
}
line.add(word.toString());
StringBuilder output = new StringBuilder();
// Проверяем слова на наличие к, дублируем их, если к есть и добавляем к строке, разделяя _
for (int i = 0; i < line.size(); i++){
output.append(line.get(i));
if (line.get(i).contains("к") | line.get(i).contains("К")){
output.append(line.get(i));
}
output.append("_");
}
output.deleteCharAt(output.length() - 1);
//Реверсируем получившуюся строку
output.reverse();
//Записываем в файл
fileWriter = new FileWriter(filetowrite);
fileWriter.write(output.toString());
fileWriter.close();
} catch (FileNotFoundException e) {
// Указанный файл не найден или произошла ошибка доступа
// (например, нет прав на чтение)
e.printStackTrace();
} catch (IOException e) {
// Произошла общая ошибка ввода-вывода
// (например, попытались прочесть больше, чем возможно)
e.printStackTrace();
} finally {
// FileReader должен быть закрыт в любом случае
if (fileReader != null) {
try {
// Закрытие тоже может сгенерировать исключение
fileReader.close();
} catch (IOException e) {}
}
}
}
}
Вариант дополнительного задания
Клонировать слова, если в них содержится символ 'к' в верхнем или нижнем регистре (Пример: символ 'в'. "Во_дворе_стоит_дом" => "ВоВо_дворедворе_стоит_дом")
Инвертировать весь текст (Дом_стоит_во_дворе => еровд_ов_тиотс_моД)
Клонировать слова, если в них содержится символ 'л' в верхнем или нижнем регистре (Пример: символ 'в'. "Во_дворе_стоит_дом" => "ВоВо_дворедворе_стоит_дом")
Листинг программного кода дополнительного задания
import java.io.*;
import java.util.ArrayList;
public class Dop {
public static void main(String[] args) throws Exception {
FileReader fileReader = null;
FileWriter fileWriter = null;
String filetoread = args[0];
String filetowrite = args[1];
try {
// У FileReader есть конструктор, принимающий адрес
// файла, который необходимо читать
fileReader = new FileReader(filetoread);
// *Тут работаем с файлом*
int x = 0;
StringBuilder word = new StringBuilder();
char symbol;
ArrayList<String> line = new ArrayList<String>();
boolean check = false;
//Считываем файл до его конца и добавляем слова в лист
while((x = fileReader.read()) != -1) {
if ((char) x != '_'){
symbol = (char) x;
word.append(symbol);
} else {
line.add(word.toString());
word.setLength(0);
}
}
line.add(word.toString());
StringBuilder output = new StringBuilder();
// Проверяем и дублируем слова с к
for (int i = 0; i < line.size(); i++){
if (line.get(i).contains("к") | line.get(i).contains("К")){
String tmp = line.get(i);
tmp = tmp + tmp;
line.set(i, tmp);
}
// Проверяем и дублируем слова с л
if (line.get(i).contains("л") | line.get(i).contains("Л")){
String tmp = line.get(i);
tmp = tmp + tmp;
line.set(i, tmp);
}
}
// Объединяем все слова из листа в строку, разделяя их _
for (int i = 0; i < line.size(); i++){
output.append(line.get(i)).append("_");
}
output.deleteCharAt(output.length() - 1);
//Реверсируем получившуюся строку
output.reverse();
//Записываем в файл
fileWriter = new FileWriter(filetowrite);
fileWriter.write(output.toString());
fileWriter.close();
} catch (FileNotFoundException e) {
// Указанный файл не найден или произошла ошибка доступа
// (например, нет прав на чтение)
e.printStackTrace();
} catch (IOException e) {
// Произошла общая ошибка ввода-вывода
// (например, попытались прочесть больше, чем возможно)
e.printStackTrace();
} finally {
// FileReader должен быть закрыт в любом случае
if (fileReader != null) {
try {
// Закрытие тоже может сгенерировать исключение
fileReader.close();
} catch (IOException e) {}
}
}
}
}
Вывод
Изучены основные средства для работы с текстовыми файлами в языке Java из пакета java.io, представляющие собой потоки ввода-вывода
Санкт-Петербург
2021