可以使用 Java Swing 提供的 JFileChooser 类来弹出选择文件位置对话框。具体实现如下:

  1. 导入 Java Swing 相关的包:
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;
  1. 修改代码中的文件路径为选择的文件路径:
// 原代码
File file = new File('E:\理论实训.pptx');

// 修改后的代码
JFileChooser fileChooser = new JFileChooser();
// 设置文件选择框的默认路径
fileChooser.setCurrentDirectory(new File(System.getProperty('user.home')));
// 设置文件类型过滤器,只显示 PPTX 文件
FileNameExtensionFilter filter = new FileNameExtensionFilter('PPTX Files', 'pptx');
fileChooser.setFileFilter(filter);
int result = fileChooser.showOpenDialog(null);
if (result == JFileChooser.APPROVE_OPTION) {
   file = fileChooser.getSelectedFile();
}
  1. 完整代码如下:
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;

public class FileTransfer {
    private FileInputStream fis = null;
    private DataOutputStream dos = null;
    private Socket client = null;

    public FileTransfer(Socket client) {
        this.client = client;
    }

    /**
     * 向服务端传输文件
     * @throws Exception
     */
    public void sendFile() throws Exception {
        try {
            JFileChooser fileChooser = new JFileChooser();
            // 设置文件选择框的默认路径
            fileChooser.setCurrentDirectory(new File(System.getProperty('user.home')));
            // 设置文件类型过滤器,只显示 PPTX 文件
            FileNameExtensionFilter filter = new FileNameExtensionFilter('PPTX Files', 'pptx');
            fileChooser.setFileFilter(filter);
            int result = fileChooser.showOpenDialog(null);
            if (result == JFileChooser.APPROVE_OPTION) {
                File file = fileChooser.getSelectedFile();
                if (file.exists()) {
                    fis = new FileInputStream(file);
                    dos = new DataOutputStream(client.getOutputStream());

                    // 文件名和长度
                    dos.writeUTF(file.getName());
                    dos.flush();
                    dos.writeLong(file.length());
                    dos.flush();
                    // 传输文件内容
                    byte[] bytes = new byte[1024];
                    int length = 0;
                    while ((length = fis.read(bytes, 0, bytes.length)) != -1) {
                        dos.write(bytes, 0, length);
                        dos.flush();
                    }
                }
            }
        } finally {
            if (fis != null)
                fis.close();
            if (dos != null)
                dos.close();
        }
    }
}
Java 文件上传:使用 JFileChooser 弹出选择文件对话框

原文地址: https://www.cveoy.top/t/topic/ocrA 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录