一、JFileChooser的用法


1.构造方法/选择文件时的目录:

(1)默认构造方法:

JFileChooser fileChooser=new JFileChooser();
int state=fileChooser.showOpenDialog(null);//显示文件选择框

显示: 

(2)带参构造方法:JFileChooser fileChooser=new JFileChooser(currentDirectory);//默认为用户文件夹

等价于:

JFileChooser fileChooser=new JFileChooser();

fileChooser.setCurrentDirectory(File file);//当前文件的目录

以第二种方法来说明,举两个例子

a.

JFileChooser fileChooser=new JFileChooser();
fileChooser.setCurrentDirectory(new File("."));//当前文件的目录

显示:

b.

JFileChooser fileChooser=new JFileChooser();
fileChooser.setCurrentDirectory(new File("/Users/zhangkanqi/Desktop/"));

显示:

 

2.设置文件打开方式:

setFileSelectionMode(int mode),mode有如下三种类型:

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

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

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

JFileChooser fileChooser=new JFileChooser();

fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);

3.是否可以多选:

JFileChooser fileChooser=new JFileChooser();

fileChooser.setMultiSelectionEnabled(true);//默认false

4.设置文件过滤器(可选择的文件类型):不添加设置默认所有文件

可用setFileFilter(FileFilter filter)设置默认的可选择的文件类型,然后再用addChoosableFileFilter(FileFilter filter)追加

JFileChooser fileChooser=new JFileChooser();
fileChooser.setFileFilter(new FileNameExtensionFilter("zip(*.txt, *.rar)", "txt", "rar"));//文件过滤器
fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("image(*.jpg,*.png,.gif)","jpg","png","gif"));
int state=fileChooser.showOpenDialog(null);

 显示:

5.设定所选择的文件/文件夹

JFileChooser fileChooser=new JFileChooser();
fileChooser.setSelectedFile(new File("/Users/zhangkanqi/Desktop/11.txt"));
//若设置文件夹,用void setSelectedFiles(File[] selectedFiles)

6.获取选择的文件/文件夹

JFileChooser fileChooser=new JFileChooser();
File file=fileChooser.getSelectedFile();
//获取文件夹用getSelectedFiles(),返回File[]

7.显示选择/保存文件窗口

JFileChooser fileChooser=new JFileChooser();
int state=fileChooser.showOpenDialog(null);
//int state=fileChooser.showSaveDialog(null);

8.用法7中state的返回值: 

 三种:

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

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

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

JFileChooser fileChooser=new JFileChooser();
int state=fileChooser.showOpenDialog(null);
if(state==fileChooser.APPROVE_OPTION)
{}

9.设置显示框的标题:

JFileChooser fileChooser=new JFileChooser();
fileChooser.setDialogTitle("Please choose a path");

 

二、利用JFileChooser选择特定的文件并打印


不过我在测试的时候遇到了个问题,我使用的打印机用下面的代码可以打印txt和pdf,但是不可以打印doc,即使doc的内容只有一行,目前还不知道是什么原因,可以是打印机比较老旧的原因吧。

package Casual;

import java.io.*;
import javax.print.*;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.print.attribute.*;
public class PrintDemo
{
	public static void main(String[]  args)
	{
		JFileChooser fileChooser=new JFileChooser();
		int state=fileChooser.showOpenDialog(null);
		//fileChooser.setCurrentDirectory(new File("/Users/zhangkanqi/Desktop/"));
		//fileChooser.setCurrentDirectory(new File("."));//当前文件的目录
		//fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);//设置选择模式(只选文件、只选文件夹、文件和文件均可选)
		//fileChooser.setMultiSelectionEnabled(true);//是否允许多选
		//fileChooser.setFileFilter(new FileNameExtensionFilter("zip(*.txt, *.rar)", "txt", "rar"));//文件过滤器
		//fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("image(*.jpg,*.png,.gif)","jpg","png","gif"));
		//fileChooser.setDialogTitle("Please choose a path");
		//int state=fileChooser.showSaveDialog(null);
		if(state==fileChooser.APPROVE_OPTION)
		{
			//fileChooser.setSelectedFile(new File("/Users/zhangkanqi/Desktop/11.txt"));词句和下面那句连着用会报错
			File file=fileChooser.getSelectedFile();
			HashPrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();//建立打印请求属性集
			DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; //设置打印格式,因未确定,选择autosense   
			PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras); //查找所有的可用的打印服务   
	        PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();   //定位默认的打印服务   
	        PrintService service = ServiceUI.printDialog(null, 200, 200, printService,    
                    defaultService, flavor, pras);  //显示打印对话框   
	        if(service!=null)
	        {
	        	try {
	        		DocPrintJob job = service.createPrintJob(); //创建打印作业   
	        		FileInputStream fis = new FileInputStream(file); //构造待打印的文件流   
	        		DocAttributeSet das = new HashDocAttributeSet();   
	        		Doc doc = new SimpleDoc(fis, flavor, das);   
	        	    job.print(doc, pras);  
	        	}
	        	catch(Exception e)
	        	{
	        		e.printStackTrace();
	        	}
	        }

		}
	}
}