Java File — как работать с файлами в Java
Май 4, 2010 10 комментариев
Для работы с файловой системой у 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(); } }); } }
Огромное спасибо, я как раз взялся за изучение этого замечательного во всех смыслах языка программирования. Информация очень полезная. Подписался на RSS ленту и с удовольствием читаю. Автор, продолжай в том же духе, польза твоего блога (во всяком случае для меня)очевидна.
новые статьи Оочень радуют. Спасибо. Продолжайте в том же духе
Вам спасибо, что читаете. Продолжаю 🙂
Мне кажется, продолжением этой статьи могла бы стать статья про JFileChooser. Я как раз сейчас для своих целей отрабатываю этот участок — так вот, темы про использование класса File и класса JFileChooser в Swing в моем представлении оказались тесно связаны. Ведь скорее всего класс File мы будем использовать для открытия файла, его редактирования, сохранения или для создания нового файла. Класс JFileChooser представляет для этих целей очень удобный GUI-интерфейс…
Да, думаю стоит написать.
Спасибо, хороший блог!
JAVA-блогов не хватает в ру нэте=)
Советую сайт http://proglang.su, много уроков по программированию в том числе и java. А вот хорошая статья http://proglang.su/java/149 про файлы в Java.
Помогите, пожалуйста. Нужно создать окно, где кнопка будет сливать два файла избранных из JFileChooser в новий файл. Спасибо
спасибо
Описание краткое, ясно и доступное. Это хорошо, но пожалуйста, комментируйте код примера! Да, код не слишком объёмный и сложный, но без комментариев сильно снижается читаемость и тяжело быстро вычленить именно тот участок в который необходим.