1. 질문 설명 - 지정된 유형의 파일 찾기
1. 질문
제목: 운영 체제에서는 다양한 유형의 파일을 파일 확장자로 구분합니다. 사용자가 입력한 확장자를 기반으로 지정된 폴더에 있는 이 유형의 파일 이름, 파일 크기 및 수정 시간을 나열합니다.
2. 문제 해결 아이디어
클래스 만들기: FilesList
FilesList 클래스는 JFrame을 상속하고 해당 형식을 인터페이스로 사용합니다.
파일 확장자를 입력할 수 있는 입력 텍스트 상자가 있습니다.
"폴더 선택" 버튼이 있습니다. 클릭하면 프로그램이 먼저 입력한 파일 확장자가 비어 있는지 확인합니다. 파일 형식을 입력하세요. 비어 있지 않은 경우 입력한 파일 확장자를 사용하여 사용자가 선택한 폴더의 파일을 필터링하고 인터페이스에 표시합니다.
필터링 방법은 File 클래스의 listFiles 메소드를 사용하여 필터링하는 것입니다
3. 자세한 코드 설명
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
*
로그인 후 복사
* @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. 문자열을 소문자 문자열로 변경하려면. , 함수
사용법
String fileType = "MD";
fileType = fileType.toLowerCase();//获取小写的字符串
로그인 후 복사
2. 질문 설명 - 트리 구조를 사용하여 경로 표시
1. 질문
제목: 운영 체제는 주로 트리 구조를 사용하여 파일을 관리합니다. JAVA의 트리 컨트롤을 사용하여 파일 구조를 표시합니다.
2. 문제 해결 아이디어
클래스 만들기: FilesTree
FilesList 클래스는 JFrame을 상속하고 해당 형식을 인터페이스로 사용합니다.
JFrame을 사용하여 JTree 컨트롤 추가
JTree 컨트롤에 대한 시스템 파일 루트 추가
시스템 파일 루트는 File의 listRoots() 메서드를 사용하여 얻을 수 있습니다.
3. 자세한 코드 설명
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
*
로그인 후 복사
* @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;
}
}
}
더블클릭하여 폴더를 확장하세요
3. 질문 설명 - 파일 내용 찾기 및 바꾸기
1. 질문: 열지 않고도 바꿀 수 있습니다. 파일.
2. 문제 해결 아이디어
클래스 만들기:ReplaceTool
ReplaceTool 클래스는 JFrame을 상속하고 해당 양식을 인터페이스로 사용합니다.
입력 상자는 두 개입니다: 교체 전 문자열과 교체 후 문자열
파일 선택 버튼을 생성하여 교체할 파일을 선택합니다
입력 상자의 내용에 따라 교체할 교체 시작 버튼을 생성합니다
Replace 문자 문자열에 사용되는 함수는 문자열 클래스의 대체 방법입니다
3. 자세한 코드 설명
pom을 사용하여 htuool 패키지를 소개합니다. 주로 파일 내용을 읽는 데 사용되는 IoUtil.read 도구 방법을 사용합니다.
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
<version>5.6.5</version>
</dependency>
로그인 후 복사
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
*
로그인 후 복사
* @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;
}
}
교체 전 텍스트 콘텐츠
위 내용은 Java에서 파일의 내용을 찾고 바꾸는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!