Java File — как работать с файлами в Java

Для работы с файловой системой у Java имеется специальный класс File, который располагается в java.io пакете. К Java Swing никакого отношения не имеет, однако я решил написать про него и разобрать небольшой пример, чтобы показать, как в Java работать с файловой системой при помощи класса File. На первый взгляд, из названия класса File, думается о том, что данный класс подходит только для работы с файлами. Но это не так. File содержит необходимый набор методов для создания, удаления файлов, а также просмотра содержимого папок. Кроме того при помощи класса Java File можно получить список дисков локальной машины, но обо всем по порядку далее. Давайте рассмотрим конкретную задачу по работе с файловой системой для File. Напишем пример, показывающий список жестких дисков и съемных устройств, при выборе конкретного диска или устройства будет показываться список директорий и файлов, расположенных у него в корне.

Первое, что необходимо сделать — это получить список жёстких дисков и съемных устройств. Сделать это очень просто при помощи класса File вот так:

File[] roots =  File.listRoots();

Далее, на основе этого массива создаем список JList.

JList list = new JList(roots);

Теперь, если добавим список JList на форму, то в нём мы увидим список жёстких дисков и съемных устройств локальной машины. Теперь нам только остается получить дочерние файлы и папки для выбранного устройства.

File root = (File) list.getSelectedValue();
File[] children = root.listFiles();

В арсенале класса File имеется еще набор методов, которые не будут использоваться в тестовом приложении, но которые заслуживают внимания. Метод exists проверяет, существует ли реально файл в файловой системе, для которого имеется объект File. К примеру, мы создаем новый объект File и говорим, что он будет соответствовать файлу C:/test.txt. Если test.txt реально существует и располагается в корне диска C:/, то метод exists вернёт true. Идем дальше. допустим такого файла, который мы описали ранее, не существует, но нам его необходимо создать. Для этого создается соответствующий объект File, а затем у него вызывается метод createNewFile.

File file = new File("C:/test.txt");

//Если требуемого файла не существует.
if(!file.exists()) {
   //Создаем его.
   file.createNewFile();
}

Для удаления файла есть метод delete, здесь думаю всё ясно. Чтобы выполнить копирование файла, необходимо использовать определенных техники — метода копирования нет. Если хотим переименовать файл, то можем воспользоваться методом renameTo. Надеюсь для этих методов в скором времени тоже соображу тестовый пример.


import java.awt.BorderLayout;
import java.awt.Dimension;
import java.io.File;

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class TestFrame extends JFrame {

	public TestFrame() {
		super("Тестовое окно");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		JPanel mainPanel = new JPanel();
		mainPanel.setLayout(new BorderLayout());

		final JPanel rootContent = new JPanel();
		rootContent.setLayout(new BoxLayout(rootContent, BoxLayout.Y_AXIS));
		final JScrollPane rootContentScroll = new JScrollPane(rootContent);
		File[] roots = File.listRoots();
		final JList list = new JList(roots);
		list.setVisibleRowCount(5);

		list.addListSelectionListener(new ListSelectionListener() {
			public void valueChanged(ListSelectionEvent e) {
				rootContent.removeAll();
				File root = (File) list.getSelectedValue();
				File[] children = root.listFiles();
				if (children != null) {
					for (int i = 0; i < children.length; i++) {
						JLabel label = new JLabel(children[i].getName());
						rootContent.add(label);
					}
				}
				rootContent.repaint();
				rootContentScroll.revalidate();
			}
		});

		mainPanel.add(new JScrollPane(list), BorderLayout.NORTH);
		mainPanel.add(rootContentScroll, BorderLayout.CENTER);

		getContentPane().add(mainPanel);

		setPreferredSize(new Dimension(260, 220));
		pack();
		setLocationRelativeTo(null);
		setVisible(true);
	}

	public static void main(String[] args) {
		javax.swing.SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				JFrame.setDefaultLookAndFeelDecorated(true);
				new TestFrame();
			}
		});
	}
}

8 Responses to Java File — как работать с файлами в Java

  1. Огромное спасибо, я как раз взялся за изучение этого замечательного во всех смыслах языка программирования. Информация очень полезная. Подписался на RSS ленту и с удовольствием читаю. Автор, продолжай в том же духе, польза твоего блога (во всяком случае для меня)очевидна.

  2. Gorets:

    новые статьи Оочень радуют. Спасибо. Продолжайте в том же духе

  3. Мне кажется, продолжением этой статьи могла бы стать статья про JFileChooser. Я как раз сейчас для своих целей отрабатываю этот участок — так вот, темы про использование класса File и класса JFileChooser в Swing в моем представлении оказались тесно связаны. Ведь скорее всего класс File мы будем использовать для открытия файла, его редактирования, сохранения или для создания нового файла. Класс JFileChooser представляет для этих целей очень удобный GUI-интерфейс…

  4. Fruzenshtein:

    Спасибо, хороший блог!
    JAVA-блогов не хватает в ру нэте=)

  5. Nota:

    Помогите, пожалуйста. Нужно создать окно, где кнопка будет сливать два файла избранных из JFileChooser в новий файл. Спасибо

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: