Скачиваний:
0
Добавлен:
13.06.2024
Размер:
383.72 Кб
Скачать

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ

УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»

(СПбГУТ)

_____________________________________________________________________

Факультет Информационных систем и технологий

Кафедра Безопасности информационных систем

Дисциплина «Кроссплатформенное программирование»

ОТЧЕТ

за практическое занятие №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

Соседние файлы в папке ЛАБЫ