JAVA JFileChooser实现文件选择和保存对话框

问题描述:

       利用 Java poi生成excel表格,可以将其保存到计算机本地磁盘,实现路径可自由选择

问题分析:

        在原来的设计中,将生成的excel表格保存到计算机本地制定的路径,可参考Java poi 通过Java程序控制excel表格中实现将数据保存到计算机本地磁盘中,不过路径是指定的,不过问题是:如何实现路径的可以自由选择呢?我们在保存文件的时候,点击保存按钮会弹出本地文件路径选择框,可以选择路径,那么,如何将程序中生成的excel表格在本地计算机的保存中实现路径的自由选择。JfileChooser类可以调用本地计算机文本选择对话框,实现文本的选择或存储。


 (一)JFileChooser方法说

        1.JFileChooser的构造方法有三种,参数设置不同代表的功能也不同。

(1)默认构造函数:JFileChooser();

(2)参数为currentDirectory:JFileChooser(currentDirectory),参数表示的意思是打开文件选取器时默认显示的文件夹                      (默认为用户文件夹)

(3)参数为currentDirectoryPath:JFileChooser(currentDirectoryPath),参数表示的意思是打开文件选取器时默认显                        示的文件夹(默认为用户文件夹)

       2.void setCurrentDirectory(File file)

            该方法主要用于设置打开导航框时显示的文件夹。

     3.void setFileSelectionMode(int mode)

   该方法用于设置文件的打开模式,一般有以下三种文件打开模式:

扫描二维码关注公众号,回复: 6152763 查看本文章

     (1)JFileChooser.FILES_ONLY: 只能选文件; 

      (2) JFileChooser.DIRECTORIES_ONLY: 只能选文件夹;

      (3)JFileChooser.FILES_AND_DIRECTORIES: 文件和文件夹都可以选。

4.void setMultiSelectionEnabled(boolean b)

          该方法用于设置是否可以同时选取多个文件,默认值是false。

5.void addChoosableFileFilter(FileFilter filter)

         该方法是用于设置文件过滤选择器,也就是允许你选择的文件类型。

6.void setFileFilter(FileFilter filter)

         该方法用于设置默认的文件过滤器。

7.void setSelectedFile(File file) ,void setSelectedFiles(File[] selectedFiles)

       两者均用于设置被选中的文件,单个或多组文件。

8.int showOpenDialog(Component parent)

       该方法用于显示我们选择文件时弹出的框,亦即文件导航窗。

9.int showSaveDialog(Component parent)

        顾名思义该方法是保存文件的弹出框。

此处两个parent表示的意思是:文件选取器对话框的父组件, 对话框将会尽量显示在靠近 parent 的中心; 如果为 null, 则显示在屏幕中心。

同时呢这两个方法的返回值也代表着特定的意思:

(1)JFileChooser.CANCEL_OPTION: 点击了取消或关闭 ;

(2) JFileChooser.APPROVE_OPTION: 点击了确认或保存 ;

(3)JFileChooser.ERROR_OPTION: 出现错误。

常常用于判断文件是否要打开或者保存。

10.File getSelectedFile() ,File[] getSelectedFiles()

         该方法用于获取打开或保存的文件。
 

使用JFileChooser即可实现计算机本地文件的打开,保存。


问题解决:

   

import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;
import javax.swing.filechooser.FileNameExtensionFilter;

import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;

public class TestOpen extends JFrame {
	private JPanel contentPane;	//声明一个 JFileChooser 对象	
	private JFileChooser chooser;	
	 File fi;

	public static void main(String[] args) {		
		EventQueue.invokeLater(new Runnable() {			
			public void run() {				
				try {					
					TestOpen frame = new TestOpen();				
					frame.setVisible(true);					
				} catch (Exception e) {					
					e.printStackTrace();					
				}				
			}			
		});		
	}
	
	public TestOpen() {
		try {			
			UIManager.setLookAndFeel(new WindowsLookAndFeel());   //	将窗体JFrame的 LookAndFeel 设定为 Windows		
		} catch (UnsupportedLookAndFeelException e1) {			
			e1.printStackTrace();			
		}
		
      //将 chooser 实例化		
		chooser=new JFileChooser();

		FileNameExtensionFilter filter = new FileNameExtensionFilter(
		        "EXCEL文件(*xls)", "xls");
	   	chooser.setFileFilter(filter);//增加文件过滤器
		String defaultFileName="侬好呀"+" .xls";;
		chooser.setSelectedFile(new File(defaultFileName)); //设置默认文件名
		
		
		//定义窗体
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);		
		setBounds(100, 100, 450, 300);		
		contentPane = new JPanel();		
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));		
		setContentPane(contentPane);		
		contentPane.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
				
		JButton btnOpenFile = new JButton("保存文件");		
		btnOpenFile.setFocusable(false);		
		btnOpenFile.addMouseListener(new MouseAdapter() {			
			@Override		
			public void mouseClicked(MouseEvent e) {
				
				/**
				 * 弹出一个打开文件的对话框 showOpenDialog()
				 * 需要指定一个父级窗体,或指定为 null
				 * 返回值是 int 类型,创建以接收返回值
				 */
		
				int value=chooser.showSaveDialog(TestOpen.this);			
				chooser.setDialogTitle("保存文件");				 
				chooser.setMultiSelectionEnabled(true);
				

				if (value==chooser.APPROVE_OPTION) {
				/*
				 * 创建一个文件对象,接收返回值	getSelectedFile()只能返回选中文件中的第一个文件,
				 *  File file=chooser.getSelectedFile()	
				 * System.out.println(file.getAbsolutePath());getSelectedFiles() 返回所有选中的文件0	
				 */
          			//显示保存的路径
					File filex[]=chooser.getSelectedFiles();					
					for (int i = 0; i < filex.length; i++) {						
						System.out.println(filex[i].getAbsolutePath());
						   fi = chooser.getSelectedFile();
					        String f = fi.getAbsolutePath()+" .xls";
					        System.out.println("save: "+f);
					}					
				}				
		    }			
		});
		
		contentPane.add(btnOpenFile);
	
		JButton btnOpenDir = new JButton("打开文件");		
		btnOpenDir.setFocusable(false);		
		btnOpenDir.addMouseListener(new MouseAdapter() {		
			@Override		
			public void mouseClicked(MouseEvent e) {
				
               //设定当前可选择的文件类型,设定为 DIRECTORIES_ONLY,即只能选择文件如果没有设定,
				//默认为 FILES_ONLY,即只能选择文件				
				chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);								
                  //将chooser 设定为可多选,如果没有设定,默认为 false,即只能单选				
				chooser.setMultiSelectionEnabled(true);								
				int value=chooser.showOpenDialog(TestOpen.this);								
				if (value==chooser.APPROVE_OPTION) {
					// 创建一个文件对象,接收返回值
					// getSelectedFile()只能返回选中文件夹中的第一个文件夹
					// File dir=chooser.getSelectedFile();
					// System.out.println(dir.getAbsolutePath());
					//getSelectedFiles() 返回所有选中的文件夹
					
					File dirx[]=chooser.getSelectedFiles();
					
					for (int i = 0; i < dirx.length; i++) {
						
						System.out.println(dirx[i].getAbsolutePath());
						
					}
					
				}
				
			}
			
		});
		
		contentPane.add(btnOpenDir);		
	}	
}

运行结果如下:

 

点击保存按钮:

       注:可以在文件名中添加自定义的文件名

点击打开按钮:

可以参考上面的代码,定义文件选择器,并实现将excel文件的保存和打开

猜你喜欢

转载自blog.csdn.net/weixin_41792162/article/details/89598040