Java 中的 JFileChooser 示例

Rupam Yadav 2023年10月12日
  1. 使用 JFileChooser 打开文件并在 Java 输出中显示其名称和路径
  2. 在 Java 中使用 JFileChooser 打开图像并将其显示的 JFrame 组件中
  3. 在 Java 中使用 JFileChooser 打开文本文件并的 JFrame 组件中显示它
Java 中的 JFileChooser 示例

JFileChooser 为我们提供了一个窗口或提示,我们可以使用它来选择文件或文件夹。它是 Swing 包的一部分。

我们将在以下部分中看到 JFileChooser 的三个示例。

使用 JFileChooser 打开文件并在 Java 输出中显示其名称和路径

在第一个示例中,我们创建了一个 JFileChooser 类对象。如果我们想在文件选择器提示打开时打开特定目录,我们可以将路径传递给 JFileChooser 的构造函数。

现在我们调用 showOpenDialog() 函数,该函数接受一个参数,该参数是文件选择器的 GUI 的父级;我们在其中传递 null,因为我们只想要提示。

根据用户输入,对 showOpenDialog() 的调用会返回一个附加到静态字段的 int

如果用户在对话框 showOpenDialog() 上单击确定,它会返回一个表示字段 APPROVE_OPTIONint,当它返回时,我们会在一个条件中检查它。

在条件语句中,我们使用 getSelectedFile() 函数获取我们从提示中选择的文件,该函数为我们提供 File 对象。现在我们可以获取文件的名称和路径。

import java.io.File;
import javax.swing.*;

public class JavaExample {
  public static void main(String[] args) {
    JFileChooser jFileChooser = new JFileChooser();

    int checkInput = jFileChooser.showOpenDialog(null);

    if (checkInput == JFileChooser.APPROVE_OPTION) {
      File openedFile = jFileChooser.getSelectedFile();

      System.out.println("File Name: " + openedFile.getName());
      System.out.println("File Location: " + openedFile.getAbsolutePath());
    }
  }
}

输出:

File Name: New Text Document.txt
File Location: C:\Users\User\Documents\New Text Document.txt

在 Java 中使用 JFileChooser 打开图像并将其显示的 JFrame 组件中

我们可以使用 JFileChooser 类选择和打开不同的文件,但我们必须手动处理这些文件。

在示例中,我们使用 JFileChooser 提示符选择并打开一个图像,然后在 JFrame 组件中显示该图像。

我们创建了一个 JFrame 和两个组件:JButtonJLabel。我们通过创建匿名类并覆盖 actionPerformed() 函数将 ActionListener 附加到 JButton

actionPerformed() 方法中,我们创建了 JFileChooser 类的对象。

对于此示例,我们只想选择图像并将文件选择器提示限制为仅选择图像文件,为此,我们需要创建一个过滤器。

首先,我们将 setAcceptAllFileFilterUsed() 设置为 false 以禁用选择所有文件的提示,然后我们创建 FileNameExtensionFilter 的对象。

FileNameExtensionFilter 的构造函数中,我们传递了两个参数:提示中显示的描述和要使用的扩展名,并不是说我们可以传递多个扩展名,因为第二个参数是一个变量。

接下来,我们调用 addChoosableFileFilter() 函数并将 FileNameExtensionFilter 对象作为其参数传递。

与前面的示例一样,我们调用 showOpenDialog() 函数,然后检查它是否返回表示字段 APPROVE_OPTION 的值。如果是这样,我们将执行条件的真正块。

我们调用 getSelectedFile() 方法并将其存储为 File 类引用以获取所选文件。

我们需要使用 ImageIO 类通过调用 read() 方法并传递 openedFile 的绝对路径来读取选定的图像文件。

ImageIO.read() 函数返回一个 Image 对象,我们将其用作 JLabel 组件的 setIcon() 方法的参数,它将图像设置为标签的图标。

我们将组件添加到 JFrame 并将其可见性设置为 true,

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;

public class JavaExample {
  public static void main(String[] args) {
    JFrame jFrame = new JFrame("JFileChooser Example");

    JButton jButton = new JButton("Open an Image");
    jButton.setBounds(200, 20, 100, 30);

    JLabel jLabel = new JLabel("");
    jLabel.setBounds(10, 60, 400, 400);

    ImageIcon imageIcon = new ImageIcon();

    jButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        JFileChooser jFileChooser = new JFileChooser();
        jFileChooser.setAcceptAllFileFilterUsed(false);
        FileNameExtensionFilter fileNameExtensionFilter =
            new FileNameExtensionFilter("Image file", "jpg", "jpeg", "PNG");
        jFileChooser.addChoosableFileFilter(fileNameExtensionFilter);

        int checkInput = jFileChooser.showOpenDialog(null);

        if (checkInput == JFileChooser.APPROVE_OPTION) {
          File openedFile = jFileChooser.getSelectedFile();

          try {
            Image image = ImageIO.read(openedFile.getAbsoluteFile());
            imageIcon.setImage(image);
            jLabel.setIcon(imageIcon);

          } catch (IOException ioException) {
            ioException.printStackTrace();
          }
        }
      }
    });

    jFrame.add(jButton);
    jFrame.add(jLabel);

    jFrame.setSize(500, 500);
    jFrame.setLayout(null);
    jFrame.setVisible(true);
  }
}

输出:

带有 JButtonJFrame 窗口:

jfilechooser1

JFileChooser 提示:

jfilechooser2

带有 JButton 和所选图像的 JFrame 窗口:

jfilechooser3

在 Java 中使用 JFileChooser 打开文本文件并的 JFrame 组件中显示它

在本例中,我们打开一个文本文件。代替 JLabel 组件,我们使用 JtextArea 组件来显示所选文本文件中的文本。

actionPerformed() 方法中,我们创建 JFileChooser 对象并使用扩展名 txt 为文本文件设置过滤器。我们使用 getSelectedFile() 函数获取选定的文件。

为了从文件中读取文本,我们首先使用在 BufferedReader 的构造函数中传递的 FileReader,它返回一个 BufferedReader 对象。

我们使用带有此对象的 readLine() 方法获取每一行。我们创建一个字符串变量 string1 和一个 StringBuilder 对象 string2

我们使用 readLine() 方法并将每一行存储在 string1 中并检查该行是否为空;如果该行为空,则表示该行中没有内容。

我们在每一行添加 string2,并在循环中的每次添加后添加一个换行符。

现在我们将 string2 设置为 JTextArea 的文本并使用 close() 方法关闭 BufferedReader

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;

public class JavaExample {
  public static void main(String[] args) {
    JFrame jFrame = new JFrame("JFileChooser Example");

    JButton jButton = new JButton("Open a text file");
    jButton.setBounds(180, 20, 150, 30);

    JTextArea jTextArea = new JTextArea("");
    jTextArea.setBounds(10, 60, 480, 400);

    jButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        JFileChooser jFileChooser = new JFileChooser();
        jFileChooser.setAcceptAllFileFilterUsed(false);
        FileNameExtensionFilter fileNameExtensionFilter =
            new FileNameExtensionFilter("Text File", "txt");
        jFileChooser.addChoosableFileFilter(fileNameExtensionFilter);

        int checkInput = jFileChooser.showOpenDialog(null);

        if (checkInput == JFileChooser.APPROVE_OPTION) {
          File openedFile = jFileChooser.getSelectedFile();

          try {
            FileReader fileReader = new FileReader(openedFile);
            BufferedReader bufferedReader = new BufferedReader(fileReader);

            String string1 = "";
            StringBuilder string2 = new StringBuilder();

            while ((string1 = bufferedReader.readLine()) != null) {
              string2.append(string1).append("\n");
            }

            jTextArea.setText(string2.toString());
            bufferedReader.close();

          } catch (IOException fileNotFoundException) {
            fileNotFoundException.printStackTrace();
          }
        }
      }
    });

    jFrame.add(jButton);
    jFrame.add(jTextArea);

    jFrame.setSize(500, 500);
    jFrame.setLayout(null);
    jFrame.setVisible(true);
  }
}

输出:

带有 JButtonJFrame 窗口:

jfilechooser4

JFileChooser 提示:

jfilechooser5

带有 JButtonJTextAreaJFrame 窗口:

jfilechooser6

作者: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

相关文章 - Java Swing

相关文章 - Java JLabel