
ЛАБЫ / отчёт 3 лаба
.docxФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)
_____________________________________________________________________
Факультет Информационных систем и технологий
Кафедра Безопасности информационных систем
Дисциплина «Кроссплатформенное программирование»
ОТЧЕТ
за практическое занятие №6
Тема: Проектирование и использование обобщенных классов
Выполнили
Студенты 2 курса, гр. ИСТ-222
__________ Шумов В.В.
__________ Черномашенцев Б.А.
Принял
Зав. кафедрой БИС
____________ Бородянский Ю.М.
Цель работы:
Получение практических навыков проектирования обобщений в Java и их использования для различных типов данных.
Теоретическая часть:
Все классы для работы с файлами расположены в пакете java.io, где также хранятся классы для работы с потоками ввода и вывода. В Java работа с файлами происходит преимущественно через байтовые и символьные потоки ввода-вывода. Исключением в данном случае является класс File.
Класс File взаимодействует непосредственно с файлами и файловой системой. Экземпляр данного класса используется, прежде всего, для доступа к свойствам файла и перемещения по иерархии подкаталогов. В нем не определены способы извлечения и сохранения данных в файл, но с помощью этого класса можно получить множество сведений о самом файле: дата, время, права доступа и путь к каталогу. По сути, класс File является объектной интерпретацией файла или каталога в Java. Каталог интерпретируется как объект класса File с единственным дополнительным свойством - списком имен файлов, которые могуг быть получены методом list( ) .Чтобы создать экземпляр класса File, используют один из его конструкторов: File(String путь к папке, String имя файла).
Для создания объектов класса File можно воспользоваться следующими конструкторами:
File (String путь_к_каталогу);
File (String путь_к_каталогу , String имя_файла);
File (File объект_каталога , String имя_файла);
File (URI объект_URI ),
где параметр путь_к_каталогу обозначает путь к файлу; параметр имя_ файла - имя конкретного файла или подкаталога; параметр объект_каталога – объект типа File, задающий каталог; а параметр объект _ UR I - объект типа UR I (Uniform Resource Identifier — унифицированный (единообразный) идентификатор ресурса), описывающий файл.
В классе File определяется немало методов для получения стандартных свойств файла, представленного объектом этого класса. Например, метод getName ( ) возвращает имя файла, метод getParent( ) - имя родительского каталога, а метод exists ( ) - логическое значение true, если файл существует, а иначе – логическое значение false . В приведенном ниже примере программы демонстрируется применение некоторых методов из класса File. При этом подразумевается, что в корневом каталоге существует каталог java с файлом one.txt.
Основные методы класса File, позволяющие получать сведения о файле или каталоге:
getName() – возвращает имя файла;
exists() – возвращает логическое значение true, если файл существует, или false в обратном случае;
isFile() – определяет, указывает ли объект на файл, возвращая соответствующее логическое значение;
isDirectory() – возвращает true, если это папка;
canWrite() – возвращает true, если файл доступен для записи;
canRead() – возвращает true, если файл доступен для чтения;
setReadOnly() – делает файл доступным только для чтения;
length() – возвращает размер файла в байтах;
renameTo(File новое имя) – переименовывает текущий файл в соответствии с переданным аргументом. Возвращает true, если операция успешна;
delete() – удаляет файл или папку (если она пуста), на который указывает вызывающий объект;
list() – извлекает список имен объектов, хранящихся в данном каталоге, в виде массива строк (применим исключительно к каталогам).
Как получить все подкаталоги и файлы в определенном каталоге показывает следующая программа.
import java.io.File;
public class FilesGet {
public static void main(String[] args) {
// определяем объект для каталога
File dir = new File("C://JavaDir");
// если объект представляет каталог
if(dir.isDirectory())
{
// получаем все вложенные объекты в каталоге
for(File item : dir.listFiles()){
if(item.isDirectory()){
System.out.println(item.getName() + " \tкаталог");
}
else{
System.out.println(item.getName() + "\tфайл");
}
}
}
}
}
Такие операции с каталогами, как удаление, переименование и создание демонстрирует следующая программа.
import java.io.File;
public class FilesApp {
public static void main(String[ ] args) {
// определяем объект для каталога
File dir = new File("C://SomeDir//NewDir");
boolean created = dir.mkdir();
if(created)
System.out.println("Каталог успешно создан");
// переименуем каталог
File newDir = new File("C://SomeDir//NewDirRenamed");
dir.renameTo(newDir);
// удалим каталог
boolean deleted = newDir.delete();
if(deleted)
System.out.println("Каталог удален");
}
}
В версии JDК 7 класс File был дополнен методом toPath( ) , который объявляется следующим образом: Path toPath ( ).
Метод toPath( ) возвращает объект типа Path , который представляет файл,
инкапсулируемый вызываемым объектом типа File . (Иными словами, метод toPath ( ) преобразует объект типа File в объект типа Path.) Интерфейс Path входит в состав пакета jаvа.niо.filе и является составной частью системы ввода-вывода NIO (сокращение от New I/0 - новый ввод-вывод). Таким образом, метод toPath( ) наводит мост между старым классом File и новым интерфейсом Path.
Ход работы:
Вывод:
Практически этот код можно применять там, где требуются навыки работы с файлами и каталогами на языке Java.
У нас появилось понимание того, как в Java работать с файлами и каталогами, включая создание, чтение, запись и удаление файлов, а также создание новых каталогов. Так же мы освоили основные операции с файлами и каталогами с использованием класса java.io.File, таких как проверка наличия, создание, удаление и получение списка файлов в каталоге.
Научились запускать внешние приложения (в данном случае Notepad) из Java-приложения с помощью класса java.lang.ProcessBuilder.
Получили опыт обработки исключений, таких как IOException, которые могут возникнуть при работе с файлами, процессами и вводом/выводом данных. Изучили использование системных свойств Java (например, System.getProperty("user.dir")) для получения информации о текущем рабочем каталоге.
Приложение
import java.io.*; import java.util.Scanner; public class Main { // Переменная для хранения текущего рабочего каталога private static String currentDirectory = System.getProperty("user.dir"); public static void main(String[] args) { Scanner scanner = new Scanner(System.in); boolean exit = false; while (!exit) { // Вывод текущего каталога System.out.println("Текущий каталог: " + currentDirectory); // Вывод меню System.out.println("1. Показать содержимое текущего каталога"); System.out.println("2. Изменить текущий каталог"); System.out.println("3. Просмотреть свойства файла"); System.out.println("4. Удалить файл"); System.out.println("5. Прочитать файл"); System.out.println("6. Создать текстовый файл"); System.out.println("7. Создать каталог"); System.out.println("8. Выход"); System.out.print("Введите ваш выбор: "); int choice = scanner.nextInt(); scanner.nextLine(); // Поглощаем символ новой строки switch (choice) { case 1: показатьСодержимое(); // вызов метода для показа содержимого текущего каталога break; case 2: System.out.print("Введите путь к новому каталогу: "); String newPath = scanner.nextLine(); изменитьКаталог(newPath); // вызов метода для изменения текущего каталога break; case 3: System.out.print("Введите имя файла: "); String filename = scanner.nextLine(); просмотретьСвойства(filename); // вызов метода для просмотра свойств файла break; case 4: System.out.print("Введите имя файла для удаления: "); String fileToDelete = scanner.nextLine(); удалитьФайл(fileToDelete); // вызов метода для удаления файла break; case 5: System.out.print("Введите имя файла для чтения: "); String fileToRead = scanner.nextLine(); прочитатьФайл(fileToRead); // вызов метода для чтения файла break; case 6: System.out.print("Введите имя файла для создания: "); String newFileName = scanner.nextLine(); создатьТекстовыйФайл(newFileName); // вызов метода для создания текстового файла break; case 7: System.out.print("Введите имя каталога для создания: "); String newDirName = scanner.nextLine(); создатьКаталог(newDirName); // вызов метода для создания нового каталога break; case 8: exit = true; // установка флага выхода из цикла break; default: System.out.println("Неверный выбор!"); // вывод сообщения об ошибке в случае неверного выбора } } } // Метод для вывода содержимого текущего каталога private static void showContents() { File directory = new File(currentDirectory); // создание объекта File для текущего каталога String[] files = directory.list(); // получение списка файлов и каталогов в текущем каталоге if (files != null) { for (String file : files) { System.out.println(file); // вывод имен файлов и каталогов на экран } } } // Метод для изменения текущего каталога private static void changeDirectory(String newPath) { File newDir = new File(newPath); // создание объекта File для нового каталога if (newDir.isDirectory()) { currentDirectory = newPath; // установка нового текущего каталога, если новый путь является допустимым каталогом } else { System.out.println("Недопустимый каталог!"); // вывод сообщения об ошибке, если новый путь не является допустимым каталогом } } // Метод для просмотра свойств файла private static void viewProperties(String filename) { File file = new File(currentDirectory + File.separator + filename); // создание объекта File для указанного файла if (file.exists()) { System.out.println("Размер файла: " + file.length() + " байт"); // вывод размера файла на экран System.out.println("Доступен для чтения: " + file.canRead()); // вывод информации о доступности файла для чтения System.out.println("Доступен для записи: " + file.canWrite()); // вывод информации о доступности файла для записи System.out.println("Доступен для выполнения: " + file.canExecute()); // вывод информации о доступности файла для выполнения } else { System.out.println("Файл не найден!"); // вывод сообщения об ошибке, если файл не найден } } // Метод для удаления файла private static void deleatFile(String filename) { File file = new File(currentDirectory + File.separator + filename); // создание объекта File для указанного файла if (file.exists()) { if (file.delete()) { // удаление файла и вывод сообщения об успехе операции System.out.println("Файл успешно удален."); } else { System.out.println("Не удалось удалить файл."); // вывод сообщения об ошибке в случае неудачного удаления файла } } else { System.out.println("Файл не найден!"); // вывод сообщения об ошибке, если файл не найден } } // Метод для чтения файла с использованием notepad.exe private static void readFile(String filename) { try { ProcessBuilder pb = new ProcessBuilder("notepad.exe", currentDirectory + File.separator + filename); // создание объекта ProcessBuilder для запуска Notepad с указанным файлом pb.start(); // запуск процесса } catch (IOException e) { e.printStackTrace(); // обработка исключения в случае ошибки запуска процесса } } // Метод для создания текстового файла private static void createTextFile(String newFileName) { File newFile = new File(currentDirectory + File.separator + newFileName); // создание объекта File для нового файла try { if (newFile.createNewFile()) { // создание нового файла и вывод сообщения об успехе операции System.out.println("Файл успешно создан."); } else { System.out.println("Файл уже существует."); // вывод сообщения о том, что файл уже существует } } catch (IOException e) { e.printStackTrace(); // обработка исключения в случае ошибки создания файла } } // Метод для создания нового каталога private static void createDirectory(String newDirName) { File newDir = new File(currentDirectory + File.separator + newDirName); // создание объекта File для нового каталога if (newDir.mkdir()) { // создание нового каталога и вывод сообщения об успехе операции System.out.println("Каталог успешно создан."); } else { System.out.println("Не удалось создать каталог."); // вывод сообщения об ошибке в случае неудачного создания каталога } } }
Санкт-Петербург 2024