一、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();
}
}
}
}
}