Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

Реальная база готовых
студенческих работ

Узнайте стоимость индивидуальной работы!

Вы нашли то, что искали?

Вы нашли то, что искали?

Да, спасибо!

0%

Нет, пока не нашел

0%

Узнайте стоимость индивидуальной работы

это быстро и бесплатно

Получите скидку

Оформите заказ сейчас и получите скидку 100 руб.!


Разработка кроссплатформенного файлового менеджера на Java

Тип Курсовая
Предмет Объектно ориентированное программирование

ID (номер) заказа
3265121

500 руб.

Просмотров
826
Размер файла
660.04 Кб
Поделиться

Ознакомительный фрагмент работы:

СОДЕРЖАНИЕ
TOC \o "1-3" \h \z \u ВВЕДЕНИЕ PAGEREF _Toc67860386 \h 31. Аналитическая часть PAGEREF _Toc67860387 \h 41.1. Java PAGEREF _Toc67860388 \h 41.2. AWT и Swing PAGEREF _Toc67860389 \h 51.3. Кроссплатформенные файловые менеджеры PAGEREF _Toc67860390 \h 62. Разработка программы PAGEREF _Toc67860391 \h 82.1. Разработка интерфейса PAGEREF _Toc67860392 \h 82.2. Разработка функционала PAGEREF _Toc67860393 \h 83. Тестирование программы PAGEREF _Toc67860394 \h 9ЗАКЛЮЧЕНИЕ PAGEREF _Toc67860395 \h 15СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ PAGEREF _Toc67860396 \h 16ПРИЛОЖЕНИЕ PAGEREF _Toc67860397 \h 17

ВВЕДЕНИЕЛюбая современная операционная система (ОС) не может обойтись без эффективного и надёжного файлового менеджера. Большие объёмы файлов постоянно нарастают и нуждаются в эффективной структуризации и разделении.
Все современные ОС включают в свой состав, в первую очередь, именно файловый менеджер, как неотъемлемую часть самой операционной системы и необходимый компонент для доступа к файловой системе. Однако наличие стандартного файлового менеджера в операционных системах не останавливает пользователей в поисках наиболее удобной программы.
В данной курсовой работе будет разработан кроссплатформенный файловый менеджер на языке программирования Java.
Программа будет иметь следующие возможности:
Просмотр файлов и каталогов в удобном виде (дерево).
Создание файлов и каталогов.
Открытие файлов.
Открытие файлов для редактирования.
Удобное перемещение по каталогам.
Переименование файлов и каталогов.
Удаление файлов и каталогов.
Вывод свойств (основных данных) по файлам и каталогам.
Установка флагов доступа (чтение, запись, исполняемый).
Программа разрабатывается для учебных целей.

1. Аналитическая частьФайловый менеджер — компьютерная программа, предоставляющая интерфейс пользователя для работы с файловой системой и файлами.
Файловый менеджер позволяет выполнять наиболее частые операции над файлами — создание, открытие, редактирование, переименование, копирование, удаление, изменение атрибутов и свойств, поиск файлов и назначение прав. Помимо основных функций, многие файловые менеджеры включают ряд дополнительных возможностей, например, таких, как работа с сетью, резервное копирование, отправка файлов на печать и другие.
1.1. JavaФайловый менеджер будет разработан на языке программирования Java.
Java — строго типизированный объектно-ориентированный язык программирования общего назначения, который был разработан Sun Microsystems. Разработка ведётся сообществом, организованным через Java Community Process; язык и основные реализующие его технологии распространяются по лицензии GPL. На текущий момент права на торговую марку принадлежат корпорации Oracle.
Программы на Java транслируются в байт-код Java, выполняемый виртуальной машиной Java (JVM) — программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор. Достоинством подобного способа выполнения программ является полная независимость байт-кода от ОС и оборудования, позволяющая выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина. Другая важная особенность Java — гибкая система безопасности, в рамках которой исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы вызывают немедленное прерывание.
Часто к недостаткам концепции виртуальной машины относят снижение производительности.
Основные возможности Java:
Автоматическое управление памятью.
Расширенные возможности обработки исключительных ситуаций.
Богатый набор средств фильтрации ввода-вывода.
Набор стандартных коллекций: массив, список, стек и т.п.
Наличие простых средств создания сетевых приложений.
Наличие классов, позволяющих выполнять HTTP-запросы и обрабатывать ответы.
Встроенные в язык средства создания многопоточных приложений, которые потом были портированы на многие языки.
Унифицированный доступ к базам данных.
Поддержка обобщений.
Поддержка лямбда-вычислений.
Поддержка замыканий.
Поддержка некоторых возможностей функционального программирования.
1.2. AWT и SwingAbstract Window Toolkit (AWT) — это исходная платформо-независимая оконная библиотека графического интерфейса (Widget toolkit) языка Java. На сегодняшний день Abstract Window Toolkit  является частью Java Foundation Classes (JFC) — стандартного API для реализации графического интерфейса в Java-программе.
Также AWT является стандартной библиотекой GUI для некоторых профилей Java ME.
AWT также предоставляет приложениям некоторую высокоуровневую функциональность:
Доступ к области уведомлений на поддерживаемых системах;
Возможность запуска некоторых десктопных приложений, таких как веб-браузеры и почтовые клиенты из Java-приложения.
Swing — библиотека для создания графического интерфейса для программ на языке Java. Swing был разработан компанией Sun Microsystems. Он содержит ряд графических компонентов, таких как кнопки, поля ввода, таблицы и т.д.
Swing относится к библиотеке классов JFC.
Архитектура Swing разработана таким образом, что вы можете изменять внешний вид и поведение приложения. «Look» определяет внешний вид компонентов, а «Feel» — их поведение.
Ни AWT, ни Swing не являются по своей природе потокобезопасными. Таким образом, код, обновляющий GUI или обрабатывающий события, должен выполняться в en:Event dispatching thread. Невыполнение этого требования может привести к взаимной блокировке или состязанию. Для решения этой проблемы служебный класс SwingWorker позволяет приложениям выполнять «тяжёлые» обработчики интерфейсных событий в потоке обработки событий.
Начиная с  Java SE 6 Update 12, стало возможно смешивать виджеты Swing and AWT без проблем с порядком наложения.
1.3. Кроссплатформенные файловые менеджерыВ таблице 1 представлены некоторые популярные файловые менеджеры, которые могут быть загружены в указанных операционных системах без эмуляции.
File manager DOS Windows Mac OS XLinux OS/2Directory Opus Нет Да Нет Нет Нет
Dolphin Нет Да Да Да Нет
Dos Navigator Да Да Нет Да Да
Double Commander Нет Да Да Да Нет
emelFM2 Нет Нет Нет Да Нет
FileCommander Нет Да Нет Нет Да
ForkLift Нет Нет Да Нет Нет
GNOME Commander Нет Нет Да Да Нет
Konqueror Нет Да Да Да Нет
Krusader Нет Нет Да Да Нет
Midnight Commander Да Да Да Да Нет
muCommander Нет Да Да Да Нет
Sunflower Нет Нет Да Нет
Thunar Нет Нет Нет Да Нет
Total Commander Нет Да Нет Нет Нет
Volkov Commander Да Да Нет Нет Нет
Worker Нет Нет Да Да Нет
Таблица 1 — Кроссплатформенные файловые менеджеры

2. Разработка программы2.1. Разработка интерфейсаНа рисунке 1 представлен интерфейс разрабатываемой программы.

Рисунок SEQ Рисунок \* ARABIC 1 — Интерфейс программы
Интерфейс программы будет реализован с помощью AWT и Swing.
2.2. Разработка функционалаПрограмма «Файловый менеджер» имеет нижеследующий функционал, который был реализован на языке программирования Java:
Просмотр файлов и каталогов в удобном виде (дерево).
Создание файлов и каталогов.
Открытие файлов.
Открытие файлов для редактирования.
Удобное перемещение по каталогам.
Переименование файлов и каталогов.
Удаление файлов и каталогов.
Вывод свойств (основных данных) по файлам и каталогам.
Установка флагов доступа (чтение, запись, исполняемый).
С реализацией соответствующих методов можно ознакомиться в Приложении.
3. Тестирование программыДля запуска программы на компьютере должна быть установлена виртуальная машина Java. Для запуска программы в ОС Windows был создан командный файл «run.bat» представленный ниже. Файл должен находится в одном каталоге с программой «prj-1.0.jar». После запуска командного файла откроется окно файлового менеджера как представлено на рисунке 2.

Рисунок SEQ Рисунок \* ARABIC 2 — Окно Файловый менеджер
Создадим тестовую директорию «testdir» (рисунок 3). Для этого необходимо нажать на кнопку «Новый».

Рисунок SEQ Рисунок \* ARABIC 3 — Создание директории
В левом окне выберем тестовую директорию (рисунок 4). Создадим там два файл «test.txt» (рисунок 5).

Рисунок SEQ Рисунок \* ARABIC 4 — Выбранная тестовая директория

Рисунок SEQ Рисунок \* ARABIC 5 — Создание файла
На рисунке 6 представлено окно после создания тестового файла в тестовой директории.

Рисунок SEQ Рисунок \* ARABIC 6 — После создания файла
После нажатия на кнопку «Редактировать» файл открывается в программе Блокнот для редактирования. На рисунке 7 представлен изменённый файл с добавленными строками.

Рисунок SEQ Рисунок \* ARABIC 7 — Файл в блокноте
На рисунке 8 представленный открытый файл в программе Notepad++ после нажатия на кнопку «Открыть». После нажатия на кнопку «Открыть» файл открывается в программе, заданной для данного типа файлов по умолчанию.

Рисунок SEQ Рисунок \* ARABIC 8 — Файл в Notepad++
На рисунке 9 представлено окно для ввода нового имени файла, после нажатия на кнопку «Переименовать».

Рисунок SEQ Рисунок \* ARABIC 9 — Переименовать файл
На рисунке 10 представлено окно после переименования файла.

Рисунок SEQ Рисунок \* ARABIC 10 — После переименования
На рисунке 11 представлено создание нового файла.

Рисунок SEQ Рисунок \* ARABIC 11 — Создание нового файла
На рисунке 12 представлен просмотр каталога после создания.

Рисунок SEQ Рисунок \* ARABIC 12 — Просмотр каталога после создание файла
На рисунке представлен запрос перед удалением файла.

Рисунок SEQ Рисунок \* ARABIC 13 — Удаление файла
На рисунке 14 представлено окно после удаления файла.

Рисунок SEQ Рисунок \* ARABIC 14 — Просмотр после удаления файла
На рисунке 15 представлено окно после удаления каталога «testdir».

Рисунок SEQ Рисунок \* ARABIC 15 — Просмотр после удаления каталога
По результатам работы программы можно заключить, что она работает корректно.

ЗАКЛЮЧЕНИЕВ результате выполнения данной курсовой работы был разработан кроссплатформенный файловый менеджер на языке программирования Java в среде программирования NetBeans.
Разработанная программа обладает следующими возможностями:
Просмотр файлов и каталогов в удобном виде (дерево).
Создание файлов и каталогов.
Открытие файлов.
Открытие файлов для редактирования.
Удобное перемещение по каталогам.
Переименование файлов и каталогов.
Удаление файлов и каталогов.
Вывод свойств (основных данных) по файлам и каталогам.
Установка флагов доступа (чтение, запись, исполняемый).

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВБарри Берд. Java 9 для чайников. — М.: «Диалектика», 2018. — 624 с. 
Бенджамин Дж. Эванс, Джеймс Гоф, Крис Ньюленд. Java: оптимизация программ. Практические методы повышения производительности приложений в JVM. — М.: Диалектика, 2019. — 448 с. 
Брюс Эккель. Философия Java. — 4-е изд. — СПб.: Питер, 2018. — 1168 с. 
Герберт Шилдт. Java. Полное руководство, 10-е издание. — М.: «Диалектика», 2018. — 1488 с.
Джошуа Блох. Java. Эффективное программирование. — 3-е. — М.: Диалектика, 2019. — 464 с. 
Кей С. Хорстманн. Java SE 8. Вводный курс. — М.: «Вильямс», 2014. — 208 с.
Кей С. Хорстманн. Java SE 9. Базовый курс. — М.: «Вильямс», 2018. — 576 с.
Кей С. Хорстманн. Java. Библиотека профессионала, том 1. Основы. 10-е издание. — М.: «Вильямс», 2017. — 864 с. 
Кей С. Хорстманн. Java. Библиотека профессионала, том 2. Расширенные средства программирования. 10-е издание. — М.: «Вильямс», 2017. — 976 с.

ПРИЛОЖЕНИЕЛистинг программы
package filemanager.prj;
import java.awt.BorderLayout;
import java.awt.FlowLayout;import java.awt.GridLayout;
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.Container;
import java.awt.Component;
import java.awt.Image;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
import javax.swing.tree.*;
import javax.swing.table.*;
import javax.swing.filechooser.FileSystemView;
import javax.imageio.ImageIO;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
import java.io.*;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
public class FileManager {
// Заголовок приложения.
public static final String APP_TITLE = "Файловый менеджер";
// Рабочий стол.
private Desktop desktop;
// Иконки.
private FileSystemView fileSystemView;
// Текущий выбранный файл.
private File currentFile;
// Главный контейнер GUI.
private JPanel gui;
// Дерево файлов.
private JTree tree;
private DefaultTreeModel treeModel;
// Таблица файлов.
private JTable table;
private JProgressBar progressBar;
private FileTableModel fileTableModel;
private ListSelectionListener listSelectionListener;
private boolean cellSizesSet = false;
private int rowIconPadding = 6;
// Кнопки для открытия, редактирования, удаления и создания нового файла.
private JButton openFile;
private JButton editFile;
private JButton deleteFile;
private JButton newFile;
// Свойства файла.
private JLabel fileName;
private JTextField path;
private JLabel date;
private JLabel size;
private JCheckBox readable;
private JCheckBox writable;
private JCheckBox executable;
private JRadioButton isDirectory;
private JRadioButton isFile;
private JPanel newFilePanel;
private JRadioButton newTypeFile;
private JTextField name;
public Container getGui() {
if (gui==null) {
gui = new JPanel(new BorderLayout(3,3));
gui.setBorder(new EmptyBorder(5,5,5,5));
fileSystemView = FileSystemView.getFileSystemView();
desktop = Desktop.getDesktop();
JPanel detailView = new JPanel(new BorderLayout(3,3));
table = new JTable();
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setAutoCreateRowSorter(true);
table.setShowVerticalLines(false);
listSelectionListener = new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent lse) {
int row = table.getSelectionModel().getLeadSelectionIndex();
setFileDetails( ((FileTableModel)table.getModel()).getFile(row) );
}
};
table.getSelectionModel().addListSelectionListener(listSelectionListener);
JScrollPane tableScroll = new JScrollPane(table);
Dimension d = tableScroll.getPreferredSize();
tableScroll.setPreferredSize(new Dimension((int)d.getWidth(), (int)d.getHeight()/2));
detailView.add(tableScroll, BorderLayout.CENTER);
DefaultMutableTreeNode root = new DefaultMutableTreeNode();
treeModel = new DefaultTreeModel(root);
TreeSelectionListener treeSelectionListener = new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent tse){
DefaultMutableTreeNode node =
(DefaultMutableTreeNode)tse.getPath().getLastPathComponent();
showChildren(node);
setFileDetails((File)node.getUserObject());
}
};
File[] roots = fileSystemView.getRoots();
for (File fileSystemRoot : roots) {
DefaultMutableTreeNode node = new DefaultMutableTreeNode(fileSystemRoot);
root.add( node );
File[] files = fileSystemView.getFiles(fileSystemRoot, true);
for (File file : files) {
if (file.isDirectory()) {
node.add(new DefaultMutableTreeNode(file));
}
}
}
tree = new JTree(treeModel);
tree.setRootVisible(false);
tree.addTreeSelectionListener(treeSelectionListener);
tree.setCellRenderer(new FileTreeCellRenderer());
tree.expandRow(0);
JScrollPane treeScroll = new JScrollPane(tree);
tree.setVisibleRowCount(15);
Dimension preferredSize = treeScroll.getPreferredSize();
Dimension widePreferred = new Dimension(200,
(int)preferredSize.getHeight());
treeScroll.setPreferredSize( widePreferred );
JPanel fileMainDetails = new JPanel(new BorderLayout(4,2));
fileMainDetails.setBorder(new EmptyBorder(0,6,0,6));
JPanel fileDetailsLabels = new JPanel(new GridLayout(0,1,2,2));
fileMainDetails.add(fileDetailsLabels, BorderLayout.WEST);
JPanel fileDetailsValues = new JPanel(new GridLayout(0,1,2,2));
fileMainDetails.add(fileDetailsValues, BorderLayout.CENTER);
fileDetailsLabels.add(new JLabel("Файл", JLabel.TRAILING));
fileName = new JLabel();
fileDetailsValues.add(fileName);
fileDetailsLabels.add(new JLabel("Путь/Имя", JLabel.TRAILING));
path = new JTextField(5);
path.setEditable(false);
fileDetailsValues.add(path);
fileDetailsLabels.add(new JLabel("Последняя модификация", JLabel.TRAILING));
date = new JLabel();
fileDetailsValues.add(date);
fileDetailsLabels.add(new JLabel("Размер", JLabel.TRAILING));
size = new JLabel();
fileDetailsValues.add(size);
fileDetailsLabels.add(new JLabel("Тип", JLabel.TRAILING));
JPanel flags = new JPanel(new FlowLayout(FlowLayout.LEADING,4,0));
isDirectory = new JRadioButton("Директория");
isDirectory.setEnabled(false);
flags.add(isDirectory);
isFile = new JRadioButton("Файл");
isFile.setEnabled(false);
flags.add(isFile);
fileDetailsValues.add(flags);
int count = fileDetailsLabels.getComponentCount();
for (int ii=0; ii<count; ii++) {
fileDetailsLabels.getComponent(ii).setEnabled(false);
}
JToolBar toolBar = new JToolBar();
toolBar.setFloatable(false);
openFile = new JButton("Открыть");
openFile.setMnemonic('o');
openFile.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae) {
try {
desktop.open(currentFile);
} catch(Throwable t) {
showThrowable(t);
}
gui.repaint();
}
});
toolBar.add(openFile);
editFile = new JButton("Редактировать");
editFile.setMnemonic('e');
editFile.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae) {
try {
desktop.edit(currentFile);
} catch(Throwable t) {
showThrowable(t);
}
}
});
toolBar.add(editFile);
openFile.setEnabled(desktop.isSupported(Desktop.Action.OPEN));
editFile.setEnabled(desktop.isSupported(Desktop.Action.EDIT));
toolBar.addSeparator();
newFile = new JButton("Новый");
newFile.setMnemonic('n');
newFile.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae) {
newFile();
}
});
toolBar.add(newFile);
JButton renameFile = new JButton("Переименовать");
renameFile.setMnemonic('r');
renameFile.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae) {
renameFile();
}
});
toolBar.add(renameFile);
deleteFile = new JButton("Удалить");
deleteFile.setMnemonic('d');
deleteFile.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae) {
deleteFile();
}
});
toolBar.add(deleteFile);
toolBar.addSeparator();
readable = new JCheckBox("(R) Чтение ");
readable.setMnemonic('a');
toolBar.add(readable);
writable = new JCheckBox("(W) Запись ");
writable.setMnemonic('w');
toolBar.add(writable);
executable = new JCheckBox("(E) Исполняемый");
executable.setMnemonic('x');
toolBar.add(executable);
JPanel fileView = new JPanel(new BorderLayout(3,3));
fileView.add(toolBar,BorderLayout.NORTH);
fileView.add(fileMainDetails,BorderLayout.CENTER);
detailView.add(fileView, BorderLayout.SOUTH);
JSplitPane splitPane = new JSplitPane(
JSplitPane.HORIZONTAL_SPLIT,
treeScroll,
detailView);
gui.add(splitPane, BorderLayout.CENTER);
JPanel simpleOutput = new JPanel(new BorderLayout(3,3));
progressBar = new JProgressBar();
simpleOutput.add(progressBar, BorderLayout.EAST);
progressBar.setVisible(false);
gui.add(simpleOutput, BorderLayout.SOUTH);
}
return gui;
}
public void showRootFile() {
tree.setSelectionInterval(0,0);
}
private TreePath findTreePath(File find) {
for (int ii=0; ii<tree.getRowCount(); ii++) {
TreePath treePath = tree.getPathForRow(ii);
Object object = treePath.getLastPathComponent();
DefaultMutableTreeNode node = (DefaultMutableTreeNode)object;
File nodeFile = (File)node.getUserObject();
if (nodeFile.equals(find)) {
return treePath;
}
}
return null;
}
private void renameFile() {
if (currentFile==null) {
showErrorMessage("Файл для переименования не выбран.","Выберите файл.");
return;
}
String renameTo = JOptionPane.showInputDialog(gui, "Новое имя");
if (renameTo!=null) {
try {
boolean directory = currentFile.isDirectory();
TreePath parentPath = findTreePath(currentFile.getParentFile());
DefaultMutableTreeNode parentNode =
(DefaultMutableTreeNode)parentPath.getLastPathComponent();
boolean renamed = currentFile.renameTo(new File(
currentFile.getParentFile(), renameTo));
if (renamed) {
if (directory) {
TreePath currentPath = findTreePath(currentFile);
System.out.println(currentPath);
DefaultMutableTreeNode currentNode =
(DefaultMutableTreeNode)currentPath.getLastPathComponent();
treeModel.removeNodeFromParent(currentNode);
}
showChildren(parentNode);
} else {
String msg = "Файл '" +
currentFile +
"' не может быть переименован.";
showErrorMessage(msg,"Ошибка переименования.");
}
} catch(Throwable t) {
showThrowable(t);
}
}
gui.repaint();
}
private void deleteFile() {
if (currentFile==null) {
showErrorMessage("Элемент для удаления не выбран.", "Выберите элемент.");
return;
}
int result = JOptionPane.showConfirmDialog(
gui,
"Вы уверены что хотите удалить?",
"Удалить",
JOptionPane.ERROR_MESSAGE
);
if (result==JOptionPane.OK_OPTION)
{
try {
System.out.println("Текущий файл: " + currentFile);
TreePath parentPath = findTreePath(currentFile.getParentFile());
System.out.println("Путь: " + parentPath);
DefaultMutableTreeNode parentNode =
(DefaultMutableTreeNode)parentPath.getLastPathComponent();
System.out.println("Узел: " + parentNode);

try
{
Files.delete(Paths.get(currentFile.toURI()));

}
catch(IOException e)
{
System.out.println("IOException");
}
} catch(Throwable t) {
showThrowable(t);
}

gui.repaint();
}

}
private void newFile() {
if (currentFile==null) {
showErrorMessage("Не выбрано место для создания нового файла.",
"Выберите место для создания файла");
return;
}
if (newFilePanel==null) {
newFilePanel = new JPanel(new BorderLayout(3,3));
JPanel southRadio = new JPanel(new GridLayout(1,0,2,2));
newTypeFile = new JRadioButton("Файл", true);
JRadioButton newTypeDirectory = new JRadioButton("Директория");
ButtonGroup bg = new ButtonGroup();
bg.add(newTypeFile);
bg.add(newTypeDirectory);
southRadio.add( newTypeFile );
southRadio.add( newTypeDirectory );
name = new JTextField(15);
newFilePanel.add( new JLabel("Имя"), BorderLayout.WEST );
newFilePanel.add( name );
newFilePanel.add( southRadio, BorderLayout.SOUTH );
}
int result = JOptionPane.showConfirmDialog(
gui,
newFilePanel,
"Создать новый",
JOptionPane.OK_CANCEL_OPTION);
if (result==JOptionPane.OK_OPTION) {
try {
boolean created;
File parentFile = currentFile;
if (!parentFile.isDirectory()) {
parentFile = parentFile.getParentFile();
}
File file = new File( parentFile, name.getText() );
if (newTypeFile.isSelected()) {
created = file.createNewFile();
} else {
created = file.mkdir();
}
if (created) {
TreePath parentPath = findTreePath(parentFile);
DefaultMutableTreeNode parentNode =
(DefaultMutableTreeNode)parentPath.getLastPathComponent();
if (file.isDirectory()) {
// add the new node..
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(file);
TreePath currentPath = findTreePath(currentFile);
DefaultMutableTreeNode currentNode =
(DefaultMutableTreeNode)currentPath.getLastPathComponent();
treeModel.insertNodeInto(newNode, parentNode, parentNode.getChildCount());
}
showChildren(parentNode);
} else {
String msg = "Файл '" +
file +
"' не может быть создан.";
showErrorMessage(msg, "Ошибка создания.");
}
} catch(Throwable t) {
showThrowable(t);
}
}
gui.repaint();
}
private void showErrorMessage(String errorMessage, String errorTitle) {
JOptionPane.showMessageDialog(
gui,
errorMessage,
errorTitle,
JOptionPane.ERROR_MESSAGE
);
}
private void showThrowable(Throwable t) {
t.printStackTrace();
JOptionPane.showMessageDialog(
gui,
t.toString(),
t.getMessage(),
JOptionPane.ERROR_MESSAGE
);
gui.repaint();
}
private void setTableData(final File[] files) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
if (fileTableModel==null) {
fileTableModel = new FileTableModel();
table.setModel(fileTableModel);
}
table.getSelectionModel().removeListSelectionListener(listSelectionListener);
fileTableModel.setFiles(files);
table.getSelectionModel().addListSelectionListener(listSelectionListener);
if (!cellSizesSet) {
Icon icon = fileSystemView.getSystemIcon(files[0]);
table.setRowHeight( icon.getIconHeight()+rowIconPadding );
setColumnWidth(0,-1);
setColumnWidth(3,60);
table.getColumnModel().getColumn(3).setMaxWidth(120);
setColumnWidth(4,-1);
setColumnWidth(5,-1);
setColumnWidth(6,-1);
setColumnWidth(7,-1);
setColumnWidth(8,-1);
setColumnWidth(9,-1);
cellSizesSet = true;
}
}
});
}
private void setColumnWidth(int column, int width) {
TableColumn tableColumn = table.getColumnModel().getColumn(column);
if (width<0) {
JLabel label = new JLabel( (String)tableColumn.getHeaderValue() );
Dimension preferred = label.getPreferredSize();
width = (int)preferred.getWidth()+14;
}
tableColumn.setPreferredWidth(width);
tableColumn.setMaxWidth(width);
tableColumn.setMinWidth(width);
}
private void showChildren(final DefaultMutableTreeNode node) {
tree.setEnabled(false);
progressBar.setVisible(true);
progressBar.setIndeterminate(true);
SwingWorker<Void, File> worker = new SwingWorker<Void, File>() {
@Override
public Void doInBackground() {
File file = (File) node.getUserObject();
if (file.isDirectory()) {
File[] files = fileSystemView.getFiles(file, true); //!!
if (node.isLeaf()) {
for (File child : files) {
if (child.isDirectory()) {
publish(child);
}
}
}
setTableData(files);
}
return null;
}
@Override
protected void process(List<File> chunks) {
for (File child : chunks) {
node.add(new DefaultMutableTreeNode(child));
}
}
@Override
protected void done() {
progressBar.setIndeterminate(false);
progressBar.setVisible(false);
tree.setEnabled(true);
}
};
worker.execute();
}
private void setFileDetails(File file) {
currentFile = file;
Icon icon = fileSystemView.getSystemIcon(file);
fileName.setIcon(icon);
fileName.setText(fileSystemView.getSystemDisplayName(file));
path.setText(file.getPath());
date.setText(new Date(file.lastModified()).toString());
size.setText(file.length() + " байт");
readable.setSelected(file.canRead());
writable.setSelected(file.canWrite());
executable.setSelected(file.canExecute());
isDirectory.setSelected(file.isDirectory());
isFile.setSelected(file.isFile());
JFrame f = (JFrame)gui.getTopLevelAncestor();
if (f!=null) {
f.setTitle(
APP_TITLE +
" :: " +
fileSystemView.getSystemDisplayName(file) );
}
gui.repaint();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch(Exception weTried) {
}
JFrame f = new JFrame(APP_TITLE);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
FileManager fileManager = new FileManager();
f.setContentPane(fileManager.getGui());
try {
URL urlBig = fileManager.getClass().getResource("fm-icon-32x32.png");
URL urlSmall = fileManager.getClass().getResource("fm-icon-16x16.png");
ArrayList<Image> images = new ArrayList<Image>();
images.add( ImageIO.read(urlBig) );
images.add( ImageIO.read(urlSmall) );
f.setIconImages(images);
} catch(Exception weTried) {}
f.pack();
f.setLocationByPlatform(true);
f.setMinimumSize(f.getSize());
f.setVisible(true);
fileManager.showRootFile();
}
});
}
}
class FileTableModel extends AbstractTableModel {
private File[] files;
private FileSystemView fileSystemView = FileSystemView.getFileSystemView();
private String[] columns = {
"Иконка",
"Файл",
"Путь/имя",
"Размер",
"Последняя модификация",
"R",
"W",
"E",
"D",
"F",
};
FileTableModel() {
this(new File[0]);
}
FileTableModel(File[] files) {
this.files = files;
}
public Object getValueAt(int row, int column) {
File file = files[row];
switch (column) {
case 0:
return fileSystemView.getSystemIcon(file);
case 1:
return fileSystemView.getSystemDisplayName(file);
case 2:
return file.getPath();
case 3:
return file.length();
case 4:
return file.lastModified();
case 5:
return file.canRead();
case 6:
return file.canWrite();
case 7:
return file.canExecute();
case 8:
return file.isDirectory();
case 9:
return file.isFile();
default:
System.err.println("Ошибка!");
}
return "";
}
public int getColumnCount() {
return columns.length;
}
public Class<?> getColumnClass(int column) {
switch (column) {
case 0:
return ImageIcon.class;
case 3:
return Long.class;
case 4:
return Date.class;
case 5:
case 6:
case 7:
case 8:
case 9:
return Boolean.class;
}
return String.class;
}
public String getColumnName(int column) {
return columns[column];
}
public int getRowCount() {
return files.length;
}
public File getFile(int row) {
return files[row];
}
public void setFiles(File[] files) {
this.files = files;
fireTableDataChanged();
}
}
class FileTreeCellRenderer extends DefaultTreeCellRenderer {
private FileSystemView fileSystemView;
private JLabel label;
FileTreeCellRenderer() {
label = new JLabel();
label.setOpaque(true);
fileSystemView = FileSystemView.getFileSystemView();
}
@Override
public Component getTreeCellRendererComponent(
JTree tree,
Object value,
boolean selected,
boolean expanded,
boolean leaf,
int row,
boolean hasFocus) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;
File file = (File)node.getUserObject();
label.setIcon(fileSystemView.getSystemIcon(file));
label.setText(fileSystemView.getSystemDisplayName(file));
label.setToolTipText(file.getPath());
if (selected) {
label.setBackground(backgroundSelectionColor);
label.setForeground(textSelectionColor);
} else {
label.setBackground(backgroundNonSelectionColor);
label.setForeground(textNonSelectionColor);
}
return label;
}
}


Нет нужной работы в каталоге?

Сделайте индивидуальный заказ на нашем сервисе. Там эксперты помогают с учебой без посредников Разместите задание – сайт бесплатно отправит его исполнителя, и они предложат цены.

Цены ниже, чем в агентствах и у конкурентов

Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит

Бесплатные доработки и консультации

Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки

Гарантируем возврат

Если работа вас не устроит – мы вернем 100% суммы заказа

Техподдержка 7 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован

avatar
Математика
История
Экономика
icon
159599
рейтинг
icon
3275
работ сдано
icon
1404
отзывов
avatar
Математика
Физика
История
icon
156450
рейтинг
icon
6068
работ сдано
icon
2737
отзывов
avatar
Химия
Экономика
Биология
icon
105734
рейтинг
icon
2110
работ сдано
icon
1318
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
54 132 оценки star star star star star
среднее 4.9 из 5
МФПУ «Синергия»
Работа была выполнена ранее положенного срока, Марина очень хорошо и умело дала понять всю...
star star star star star
РЭУ им.Плеханова
Благодарю Евгению за выполнение работы,оценка-отлично.Сделано -все как положено,грамотно и...
star star star star star
ТУСУР
Спасибо автору, всё выполнено быстро и хорошо. На любые вопросы автор отвечает быстро и по...
star star star star star

Последние размещённые задания

Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн

Подогнать готовую курсовую под СТО

Курсовая, не знаю

Срок сдачи к 7 дек.

только что
только что

Выполнить задания

Другое, Товароведение

Срок сдачи к 6 дек.

1 минуту назад

Архитектура и организация конфигурации памяти вычислительной системы

Лабораторная, Архитектура средств вычислительной техники

Срок сдачи к 12 дек.

1 минуту назад

Организации профилактики травматизма в спортивных секциях в общеобразовательной школе

Курсовая, профилактики травматизма, медицина

Срок сдачи к 5 дек.

2 минуты назад

краткая характеристика сбербанка анализ тарифов РКО

Отчет по практике, дистанционное банковское обслуживание

Срок сдачи к 5 дек.

2 минуты назад

Исследование методов получения случайных чисел с заданным законом распределения

Лабораторная, Моделирование, математика

Срок сдачи к 10 дек.

4 минуты назад

Проектирование заготовок, получаемых литьем в песчано-глинистые формы

Лабораторная, основы технологии машиностроения

Срок сдачи к 14 дек.

4 минуты назад

2504

Презентация, ММУ одна

Срок сдачи к 7 дек.

6 минут назад

выполнить 3 задачи

Контрольная, Сопротивление материалов

Срок сдачи к 11 дек.

6 минут назад

Вам необходимо выбрать модель медиастратегии

Другое, Медиапланирование, реклама, маркетинг

Срок сдачи к 7 дек.

7 минут назад

Ответить на задания

Решение задач, Цифровизация процессов управления, информатика, программирование

Срок сдачи к 20 дек.

7 минут назад
8 минут назад

Все на фото

Курсовая, Землеустройство

Срок сдачи к 12 дек.

9 минут назад

Разработка веб-информационной системы для автоматизации складских операций компании Hoff

Диплом, Логистические системы, логистика, информатика, программирование, теория автоматического управления

Срок сдачи к 1 мар.

10 минут назад
11 минут назад

перевод текста, выполнение упражнений

Перевод с ин. языка, Немецкий язык

Срок сдачи к 7 дек.

11 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

Размещенные на сайт контрольные, курсовые и иные категории работ (далее — Работы) и их содержимое предназначены исключительно для ознакомления, без целей коммерческого использования. Все права в отношении Работ и их содержимого принадлежат их законным правообладателям. Любое их использование возможно лишь с согласия законных правообладателей. Администрация сайта не несет ответственности за возможный вред и/или убытки, возникшие в связи с использованием Работ и их содержимого.

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

Используя «Свежую базу РГСР», вы принимаете пользовательское соглашение
и политику обработки персональных данных
Сайт работает по московскому времени:

Вход
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Файлы (при наличии)

    это быстро и бесплатно
    Введите ваш e-mail
    Файл с работой придёт вам на почту после оплаты заказа
    Успешно!
    Работа доступна для скачивания 🤗.