Java | ShowSaveDialog.getSelectedFile的解释

本文档介绍了文件选择器的相关API,包括getSelectedFile()用于获取当前选中的文件,setSelectedFile()用于设置选中文件并更新当前目录,以及getSelectedFiles()用于在多选模式下获取所有选中文件。这些方法在用户界面交互和文件操作中起到关键作用。

getSelectedFile

public File getSelectedFile()
返回选中的文件。可由程序员通过 setFile 或者通过用户操作(如在 UI 中键入文件名,或者从 UI 中的列表内选择文件)来进行此设置。
返回:
选中的文件

setSelectedFile

public void setSelectedFile(File file)
设置选中的文件。如果该文件的父目录不是当前目录,则将当前目录更改为该文件的父目录。
参数:
file - 选中的文件

getSelectedFiles

public File[] getSelectedFiles()
如果将文件选择器设置为允许选择多个文件,则返回选中文件的列表。

import javax.swing.*; import javax.swing.filechooser.FileSystemView; import javax.swing.table.DefaultTableModel; import java.awt.*; import java.awt.event.ActionEvent; import java.io.*; import java.util.*; import java.util.concurrent.*; import java.util.List; class FileScannerGUI extends JFrame { // 文件信息类 static class FileInfo { String name; String path; long size; // 字节 String extension; public FileInfo(File file) { this.name = file.getName(); this.path = file.getAbsolutePath(); this.size = file.length(); this.extension = getExtension(file); } private String getExtension(File file) { String name = file.getName(); int dotIndex = name.lastIndexOf('.'); return (dotIndex == -1) ? "" : name.substring(dotIndex + 1); } public Object[] toTableRow() { return new Object[]{ name, path, String.format("%.2f KB", size / 1024.0), extension }; } } private JButton selectDirButton, startScanButton, saveButton, searchButton; private JTextField dirField, searchField; private JTable resultTable; private DefaultTableModel tableModel, filterTableModel; private JTextArea logArea; private final List<FileInfo> filesFound = Collections.synchronizedList(new ArrayList<>()); public FileScannerGUI() { setTitle("多线程文件扫描器 - GUI 版"); setSize(1000, 600); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); // 输入面板 JPanel inputPanel = new JPanel(new BorderLayout(5, 5)); dirField = new JTextField(); selectDirButton = new JButton("选择目录"); inputPanel.add(dirField, BorderLayout.CENTER); inputPanel.add(selectDirButton, BorderLayout.EAST); // 搜索面板 JPanel searchPanel = new JPanel(new BorderLayout(5, 5)); searchField = new JTextField(); searchButton = new JButton("搜索"); searchPanel.add(new JLabel("搜索文件名/扩展名: "), BorderLayout.WEST); searchPanel.add(searchField, BorderLayout.CENTER); searchPanel.add(searchButton, BorderLayout.EAST); // 按钮面板 JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); startScanButton = new JButton("开始扫描"); saveButton = new JButton("保存结果"); buttonPanel.add(startScanButton); buttonPanel.add(saveButton); // 表格模型 String[] columns = {"文件名", "路径", "大小", "类型"}; tableModel = new DefaultTableModel(columns, 0); filterTableModel = new DefaultTableModel(columns, 0); resultTable = new JTable(filterTableModel); JScrollPane tableScrollPane = new JScrollPane(resultTable); // 日志区域 logArea = new JTextArea(); logArea.setEditable(false); JScrollPane logScrollPane = new JScrollPane(logArea); logScrollPane.setBorder(BorderFactory.createTitledBorder("日志信息")); // 添加组件 add(inputPanel, BorderLayout.NORTH); add(searchPanel, BorderLayout.CENTER); add(buttonPanel, BorderLayout.PAGE_END); add(tableScrollPane, BorderLayout.WEST); add(logScrollPane, BorderLayout.SOUTH); // 事件绑定 selectDirButton.addActionListener(this::chooseDirectory); startScanButton.addActionListener(this::startScan); saveButton.addActionListener(this::saveToFile); searchButton.addActionListener(this::searchFiles); } private void chooseDirectory(ActionEvent e) { JFileChooser fc = new JFileChooser(); fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); int option = fc.showOpenDialog(this); if (option == JFileChooser.APPROVE_OPTION) { dirField.setText(fc.getSelectedFile().getAbsolutePath()); } } private void startScan(ActionEvent e) { String path = dirField.getText(); if (path.isEmpty()) { JOptionPane.showMessageDialog(this, "请先选择一个目录!", "错误", JOptionPane.ERROR_MESSAGE); return; } File rootDir = new File(path); if (!rootDir.exists() || !rootDir.isDirectory()) { JOptionPane.showMessageDialog(this, "无效的目录路径!", "错误", JOptionPane.ERROR_MESSAGE); return; } startScanButton.setEnabled(false); logArea.setText("🔍 开始多线程扫描目录: " + rootDir.getAbsolutePath() + "\n"); tableModel.setRowCount(0); // 清空旧数据 filterTableModel.setRowCount(0); new ScanWorker(rootDir).execute(); } private void saveToFile(ActionEvent e) { JFileChooser fc = new JFileChooser(); fc.setFileSelectionMode(JFileChooser.FILES_ONLY); fc.setDialogTitle("保存扫描结果"); int option = fc.showSaveDialog(this); if (option == JFileChooser.APPROVE_OPTION) { File file = fc.getSelectedFile(); try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) { for (FileInfo info : filesFound) { writer.write(info.toString()); writer.newLine(); } logArea.append("✅ 结果已保存到文件: " + file.getAbsolutePath() + "\n"); } catch (IOException ex) { ex.printStackTrace(); logArea.append("❌ 保存失败: " + ex.getMessage() + "\n"); } } } private void searchFiles(ActionEvent e) { String keyword = searchField.getText().trim().toLowerCase(); if (keyword.isEmpty()) { JOptionPane.showMessageDialog(this, "请输入搜索关键字!", "提示", JOptionPane.INFORMATION_MESSAGE); return; } filterTableModel.setRowCount(0); // 清空旧结果 for (FileInfo info : filesFound) { if (info.name.toLowerCase().contains(keyword) || info.extension.toLowerCase().contains(keyword) || info.path.toLowerCase().contains(keyword)) { filterTableModel.addRow(info.toTableRow()); } } logArea.append("🔍 搜索完成,关键字: " + keyword + "\n"); } private class ScanWorker extends SwingWorker<Void, String> { private final File rootDir; public ScanWorker(File rootDir) { this.rootDir = rootDir; } @Override protected Void doInBackground() { ForkJoinPool pool = new ForkJoinPool(); ScanTask task = new ScanTask(rootDir); pool.invoke(task); return null; } @Override protected void process(List<String> chunks) { for (String msg : chunks) { logArea.append(msg + "\n"); } } @Override protected void done() { for (FileInfo info : filesFound) { tableModel.addRow(info.toTableRow()); } logArea.append("📊 扫描完成,共找到 " + filesFound.size() + " 个文件。\n"); startScanButton.setEnabled(true); } } private class ScanTask extends RecursiveAction { private final File dir; public ScanTask(File dir) { this.dir = dir; } @Override protected void compute() { File[] files = dir.listFiles(); if (files == null) return; List<ScanTask> subTasks = new ArrayList<>(); for (File file : files) { if (file.isDirectory()) { ScanTask task = new ScanTask(file); subTasks.add(task); task.fork(); } else { filesFound.add(new FileInfo(file)); } } for (ScanTask task : subTasks) { task.join(); } } } public static void main(String[] args) { SwingUtilities.invokeLater(() -> { new FileScannerGUI().setVisible(true); }); } } 要全盘搜索
08-19
package TT; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JTextArea; import javax.swing.filechooser.FileNameExtensionFilter; public class HFile { public void openFile(JFrame f,JTextArea textArea) { // 创建一个默认的文件选取器 JFileChooser fileChooser = new JFileChooser(); // 设置默认显示的文件夹为当前文件夹 fileChooser.setCurrentDirectory(new File(".")); // 设置文件选择的模式(只选文件、只选文件夹、文件和文件均可选) fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); // 设置是否允许多选 fileChooser.setMultiSelectionEnabled(false); // 设置默认使用的文件过滤器 fileChooser.setFileFilter(new FileNameExtensionFilter("txt(*.txt)", "txt")); // 打开文件选择框 int result = fileChooser.showOpenDialog(f); if(result==1) return ; if (result == JFileChooser.APPROVE_OPTION) { try { textArea.setText(""); File file = fileChooser.getSelectedFile(); FileInputStream fis=new FileInputStream(file); try{ //读取数据,并将读取到的数据存储到数组中 byte[] data = new byte[1024]; //数据存储的数组 int i = fis.read(data); //解析数据 String s = new String(data,0,i); textArea.append(s); }catch(Exception e){ e.printStackTrace(); }finally{ try{ fis.close(); }catch(Exception e){} } f.setTitle(file.getName()+" - 文本编辑器"); } catch (IOException e) { e.printStackTrace(); } } } public void saveFile(JFrame f,JTextArea textArea) { // 创建一个默认的文件选取器 JFileChooser fileChooser = new JFileChooser(); // 设置默认显示的文件夹为当前文件夹 fileChooser.setCurrentDirectory(new File(".")); // 设置打开文件选择框后默认输入的文件名 fileChooser.setSelectedFile(new File("新建记事本.txt")); // 打开文件选择框 int select = fileChooser.showSaveDialog(f); if (select == JFileChooser.APPROVE_OPTION) { // 保存文本内容 File file = fileChooser.getSelectedFile(); try { //覆盖文件式写入 OutputStream outToFileEnd = new FileOutputStream(file); String string = textArea.getText(); byte[] bs = string.getBytes(); outToFileEnd.write(bs); outToFileEnd.close(); f.setTitle(file.getName()+" - 文本编辑器"); } catch (Exception e1) { e1.printStackTrace(); } } } 其中的Java基础知识}
06-04
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*; public class Main extends JFrame { private JTextArea textArea; public Main() { // 设置窗口标题 setTitle("Java 记事本"); // 设置窗口大小 setSize(800, 600); // 设置关闭操作 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置布局 setLayout(new BorderLayout()); // 创建文本区域 textArea = new JTextArea(); JScrollPane scrollPane = new JScrollPane(textArea); add(scrollPane, BorderLayout.CENTER); // 创建菜单栏 JMenuBar menuBar = new JMenuBar(); JMenu fileMenu = new JMenu("文件"); JMenu editMenu = new JMenu("编辑"); JMenuItem openMenuItem = new JMenuItem("打开"); JMenuItem newMenuItem = new JMenuItem("新建"); JMenuItem saveMenuItem = new JMenuItem("保存"); createMenuItem(editMenu, "剪切", e -> textArea.cut()); // 剪切选中内容到剪贴板 createMenuItem(editMenu, "复制", e -> textArea.copy()); // 复制选中内容到剪贴板 createMenuItem(editMenu, "粘贴", e -> textArea.paste()); // 从剪贴板粘贴内容 editMenu.addSeparator(); // 添加分隔线 createMenuItem(editMenu, "查找", e -> showSearchDialog()); // 为菜单项添加事件监听器 openMenuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { openFile(); } }); newMenuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { newFile(); } }); saveMenuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { saveFile(); } }); // 将菜单项添加到菜单中 fileMenu.add(openMenuItem); fileMenu.add(newMenuItem); fileMenu.add(saveMenuItem); menuBar.add(fileMenu); setJMenuBar(menuBar); } private JMenuItem createMenuItem(JMenu menu, String text, ActionListener listener) { JMenuItem menuItem = new JMenuItem(text); menuItem.addActionListener(listener); menu.add(menuItem); return menuItem; } private void showSearchDialog() { String searchText = JOptionPane.showInputDialog(this, "输入要查找的文本:", "查找", JOptionPane.PLAIN_MESSAGE); if (searchText != null && !searchText.isEmpty()) { String content = textArea.getText(); int foundIndex = content.indexOf(searchText); if (foundIndex != -1) { // 高亮显示找到的文本 textArea.select(foundIndex, foundIndex + searchText.length()); textArea.grabFocus(); } else { JOptionPane.showMessageDialog(this, "找不到匹配的文本", "查找结果", JOptionPane.INFORMATION_MESSAGE); } } } // 打开文件方法 private void openFile() { JFileChooser fileChooser = new JFileChooser(); int result = fileChooser.showOpenDialog(this); if (result == JFileChooser.APPROVE_OPTION) { File selectedFile = fileChooser.getSelectedFile(); try (BufferedReader reader = new BufferedReader(new FileReader(selectedFile))) { textArea.setText(""); String line; while ((line = reader.readLine()) != null) { textArea.append(line + "\n"); } setTitle("Java 记事本 - " + selectedFile.getAbsolutePath()); } catch (IOException ex) { ex.printStackTrace(); } } } // 新建文件方法 private void newFile() { textArea.setText(""); setTitle("Java 记事本"); } // 保存文件方法 private void saveFile() { JFileChooser fileChooser = new JFileChooser(); int result = fileChooser.showSaveDialog(this); if (result == JFileChooser.APPROVE_OPTION) { File selectedFile = fileChooser.getSelectedFile(); try (BufferedWriter writer = new BufferedWriter(new FileWriter(selectedFile))) { writer.write(textArea.getText()); } catch (IOException ex) { ex.printStackTrace(); } } } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { Main notepad = new Main(); notepad.setVisible(true); } }); } }
最新发布
11-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值