1. Penerangan soalan - Cari fail jenis yang ditentukan
1 Topik
Tajuk: Dalam sistem pengendalian, jenis fail yang berbeza dibezakan mengikut sambungan failnya. Senaraikan nama fail, saiz fail dan masa pengubahsuaian fail jenis ini dalam folder yang ditentukan berdasarkan sambungan yang dimasukkan oleh pengguna.
2. Idea penyelesaian masalah
Buat kelas: FilesList
Kelas FilesList mewarisi JFrame dan menggunakan borang sebagai antara muka.
Terdapat kotak teks input untuk memasukkan sambungan fail
Terdapat butang "Pilih Folder" selepas mengklik, program akan menentukan sama ada sambungan fail yang dimasukkan ia kosong, gesaan: Sila masukkan jenis fail. Jika tidak kosong, gunakan sambungan fail yang dimasukkan untuk menapis fail dalam folder yang dipilih oleh pengguna dan memaparkannya pada antara muka.
Kaedah penapisan ialah menggunakan kaedah listFiles kelas Fail untuk menapis
3 Penjelasan kod terperinci
package com.xiaoxuzhu;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
/**
* Description:
*
* @author xiaoxuzhu
* @version 1.0
*
* <pre class="brush:php;toolbar:false">
* 修改记录:
* 修改后版本 修改人 修改日期 修改内容
* 2022/5/2.1 xiaoxuzhu 2022/5/2 Create
*
Salin selepas log masuk
* @date 2022/5/2
*/
public class FilesList extends JFrame {
/**
*
*/
private static final long serialVersionUID = -2029566581047632579L;
private JPanel contentPane;
private JTextField textField;
private JTable table;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
FilesList frame = new FilesList();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public FilesList() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JPanel panel = new JPanel();
contentPane.add(panel, BorderLayout.NORTH);
JLabel label = new JLabel("输入文件扩展名:");
label.setFont(new Font("微软雅黑", Font.PLAIN, 15));
panel.add(label);
textField = new JTextField();
textField.setFont(new Font("微软雅黑", Font.PLAIN, 15));
panel.add(textField);
textField.setColumns(12);
JButton button = new JButton("选择文件夹");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
do_button_actionPerformed(e);
}
});
button.setFont(new Font("微软雅黑", Font.PLAIN, 15));
panel.add(button);
JScrollPane scrollPane = new JScrollPane();
contentPane.add(scrollPane, BorderLayout.CENTER);
table = new JTable();
JTableHeader header = table.getTableHeader();
header.setFont(new Font("微软雅黑", Font.PLAIN, 15));
header.setPreferredSize(new Dimension(header.getWidth(), 25));// 修改表头的高度
table.setFont(new Font("微软雅黑", Font.PLAIN, 13));
table.setRowHeight(25);
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.setColumnIdentifiers(new String[] { "文件名", "文件大小", "修改时间" });
scrollPane.setViewportView(table);
}
protected void do_button_actionPerformed(ActionEvent e) {
final String fileType = textField.getText();// 获得用户输入的文件类型
if (fileType.isEmpty()) {// 提示用户输入文件类型
JOptionPane.showMessageDialog(this, "请输入文件类型!", "", JOptionPane.WARNING_MESSAGE);
return;
}
JFileChooser chooser = new JFileChooser();// 创建文件选择器
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);// 设置仅能选择文件夹
chooser.setMultiSelectionEnabled(false);// 禁止选择多个文件夹
int result = chooser.showOpenDialog(this);// 打开文件选择器
if (result == JFileChooser.APPROVE_OPTION) {
File[] listFiles = chooser.getSelectedFile().listFiles(new java.io.FileFilter() {
@Override
public boolean accept(File pathname) {
if (pathname.getName().toLowerCase().endsWith(fileType.toLowerCase())) {
return true;
} else {
return false;
}
}
});// 获得符合条件的文件
table.removeAll();
DefaultTableModel model = (DefaultTableModel) table.getModel();// 获得默认表格模型
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 指定日期格式
for (File file : listFiles) {
String name = file.getName();// 获得文件名
long size = file.length();// 获得文件大小
String modifyDate = format.format(new Date(file.lastModified()));// 获得文件修改日期
model.addRow(new String[] { name, "" + size, modifyDate });// 向表格中增加数据
}
table.setModel(model);// 更新表格模型
}
}
}
4 Ketahui satu lagi titik pengetahuan
Untuk menukar rentetan menjadi rentetan huruf kecil, anda boleh menggunakan fungsi
toLowerCase().
Salin selepas log masuk
Penggunaan
String fileType = "MD";
fileType = fileType.toLowerCase();//获取小写的字符串
Salin selepas log masuk
2. Penerangan soalan - Gunakan struktur pokok untuk memaparkan laluan
1. Soalan
Soalan: Sistem pengendalian terutamanya menggunakan struktur pokok untuk menguruskan fail. Gunakan kawalan pokok JAVA untuk memaparkan struktur fail.
2. Idea penyelesaian masalah
Buat kelas: FilesTree
Kelas FilesList mewarisi JFrame dan menggunakan borang sebagai antara muka.
Tambah kawalan JTree menggunakan JFrame
Tambahkan akar fail sistem untuk kawalan JTree
Akar fail sistem boleh diperoleh menggunakan kaedah listRoots() Fail.
3. Penjelasan kod terperinci
package com.xiaoxuzhu;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.io.File;
import java.io.FileFilter;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.event.TreeSelectionListener;
import javax.swing.event.TreeSelectionEvent;
/**
* Description:
*
* @author xiaoxuzhu
* @version 1.0
*
* <pre class="brush:php;toolbar:false">
* 修改记录:
* 修改后版本 修改人 修改日期 修改内容
* 2022/5/2.1 xiaoxuzhu 2022/5/2 Create
*
Salin selepas log masuk
* @date 2022/5/2
*/
public class FilesTree extends JFrame {
/**
*
*/
private static final long serialVersionUID = -2055459510450224221L;
private JPanel contentPane;
private JTree tree;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
FilesTree frame = new FilesTree();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public FilesTree() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JScrollPane scrollPane = new JScrollPane();
contentPane.add(scrollPane, BorderLayout.CENTER);
File[] disks = File.listRoots();// 获得所有可用的文件系统根
DefaultMutableTreeNode root = new DefaultMutableTreeNode();// 创建节点
for (File disk : disks) {// 将File数组中的元素增加到节点上
root.add(new DefaultMutableTreeNode(disk));
}
tree = new JTree(root);// 使用节点创建树控件
tree.addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
do_tree_valueChanged(e);
}
});
scrollPane.setViewportView(tree);
}
protected void do_tree_valueChanged(TreeSelectionEvent e) {
// 获得用户选择的节点
DefaultMutableTreeNode selectNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
File selectFile = (File) selectNode.getUserObject();// 获得节点代表的File类型对象
if (selectFile.isDirectory()) {// 如果File类型对象是文件夹
File[] files = selectFile.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {// 过滤掉隐藏类型文件
if (pathname.isHidden()) {
return false;
} else {
return true;
}
}
});
for (File file : files) {// 将符合条件的File类型对象增加到用户选择的节点中
selectNode.add(new DefaultMutableTreeNode(file));
}
} else {
return;
}
}
}
Klik dua kali untuk mengembangkan folder
3. Penerangan Soalan - Cari dan Gantikan Kandungan Fail
1. Soalan
Tajuk: Anda boleh menggantikan kandungan fail tanpa membuka fail.
2. Idea penyelesaian masalah
Buat kelas: ReplaceTool
Kelas ReplaceTool mewarisi JFrame dan menggunakan borang sebagai antara muka.
Terdapat dua kotak input: rentetan sebelum penggantian dan rentetan selepas penggantian
Buat butang fail pilih untuk memilih fail yang hendak diganti
Buat butang ganti mula, Gantikan mengikut kandungan kotak input
Fungsi yang digunakan untuk menggantikan rentetan ialah kaedah ganti kelas String
3 Penjelasan kod terperinci
Gunakan pom dan memperkenalkan pakej htuool Terutamanya menggunakan kaedah alat ini: IoUtil.read, digunakan untuk membaca kandungan fail.
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
<version>5.6.5</version>
</dependency>
Salin selepas log masuk
package com.xiaoxuzhu;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import javax.swing.filechooser.FileNameExtensionFilter;
/**
* Description:
*
* @author xiaoxuzhu
* @version 1.0
*
* <pre class="brush:php;toolbar:false">
* 修改记录:
* 修改后版本 修改人 修改日期 修改内容
* 2022/5/2.1 xiaoxuzhu 2022/5/2 Create
*
Salin selepas log masuk
* @date 2022/5/2
*/
public class ReplaceTool extends JFrame {
/**
*
*/
private static final long serialVersionUID = -6579898848014795564L;
private JPanel contentPane;
private JTextField beforeTextField;
private JTextField afterTextField;
private File textFile;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ReplaceTool frame = new ReplaceTool();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public ReplaceTool() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 400, 150);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new GridLayout(2, 1, 5, 5));
JPanel contentPanel = new JPanel();
contentPane.add(contentPanel);
JLabel beforeLabel = new JLabel("替换前字符串:");
contentPanel.add(beforeLabel);
beforeTextField = new JTextField();
contentPanel.add(beforeTextField);
beforeTextField.setColumns(10);
JButton chooseButton = new JButton("选择文件");
chooseButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
do_chooseButton_actionPerformed(e);
}
});
contentPanel.add(chooseButton);
JPanel buttonPanel = new JPanel();
contentPane.add(buttonPanel);
JButton replaceButton = new JButton("开始替换");
replaceButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
do_replaceButton_actionPerformed(e);
}
});
JLabel afterlabel = new JLabel("替换后字符串:");
buttonPanel.add(afterlabel);
afterTextField = new JTextField();
buttonPanel.add(afterTextField);
afterTextField.setColumns(10);
buttonPanel.add(replaceButton);
}
protected void do_chooseButton_actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser();
chooser.setFileFilter(new FileNameExtensionFilter("文本文件", "txt"));
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.setMultiSelectionEnabled(false);
int result = chooser.showOpenDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
textFile = chooser.getSelectedFile();
}
}
protected void do_replaceButton_actionPerformed(ActionEvent e) {
String before = beforeTextField.getText();// 获得替换前字符串
if (before.isEmpty()) {// 验证字符串是否为空
JOptionPane.showMessageDialog(this, "请输入替换前字符串", "警告信息", JOptionPane.WARNING_MESSAGE);
return;
}
String after = afterTextField.getText();// 获得替换后字符串
if (after.isEmpty()) {// 验证字符串是否为空
JOptionPane.showMessageDialog(this, "请输入替换后字符串", "警告信息", JOptionPane.WARNING_MESSAGE);
return;
}
FileReader reader = null;// 创建文件读流
FileWriter writer = null;// 创建文件写流
StringBuilder sb = new StringBuilder();// 使用StringBuilder对象保存文件内容
int flag = 0;// 声明文件读入标示
char[] temp = new char[1024];// 使用字符数组读入文件
try {
reader = new FileReader(textFile);// 使用选择的文件创建读流
while ((flag = reader.read(temp)) != -1) {
sb.append(temp);// 读入文件中的内容
}
String content = sb.toString().replace(before, after);// 替换字符串
writer = new FileWriter(textFile);// 创建文件写流
writer.write(content); // 将替换后的字符串写入到文件
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();// 关闭文件读流
} catch (IOException e1) {
e1.printStackTrace();
}
}
if (writer != null) {
try {
writer.close();// 关闭文件写流
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
JOptionPane.showMessageDialog(this, "字符串替换成功!");
return;
}
}
Kandungan teks sebelum diganti
Atas ialah kandungan terperinci Bagaimana untuk mencari dan menggantikan kandungan dalam fail dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!