1.文件选择对话框的用户创建经常使用打开和保存文件的对话框,它是一个独立的组件,我们可以使用文件选择器打开文件和保存文件,有时候将图片和文件保存到数据库,可以使用文件选择器获取文件路径,并把文件路径保存到数据库即可。
2.文件选择器代码实例
package com.Swing;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class FileChooserDemo extends JFrame implements ActionListener{
private JTextArea ta;
private JFileChooser jfc=new JFileChooser(new File("."));
private JButton bOpen,bSave;
private JScrollPane ps;
public FileChooserDemo(){
ta=new JTextArea(10,20);
ps=new JScrollPane(ta);
bOpen=new JButton("选择文件");
bSave=new JButton("保存文件");
bOpen.addActionListener(this);
bSave.addActionListener(this);
this.add(ps);
this.add(bOpen);
this.add(bSave);
this.setTitle("文件选择器的使用");
this.setLayout(new FlowLayout(FlowLayout.CENTER,15,10));
this.setSize(300,300);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
JButton jbt= (JButton) e.getSource();
//1.点击bOpen要做的事为
if(jbt==bOpen){
//打开文件选择器对话框
int status=jfc.showOpenDialog(this);
//没有选打开按钮结果提示
if(status!=JFileChooser.APPROVE_OPTION){
ta.setText("没有选中文件");
}
else{
try {
//被选中的文件保存为文件对象
File file=jfc.getSelectedFile();
Scanner scanner=new Scanner(file);
String info="";
while(scanner.hasNextLine())
{
String str=scanner.nextLine();
info+=str+"\r\n";
}
//把读取的数据存到文本框中
ta.setText(info);
} catch (FileNotFoundException e1) {
System.out.println("系统没有找到此文件");
e1.printStackTrace();
}
}
}
//表示单击存盘按钮
else{
int re=jfc.showOpenDialog(this);
if(re==JFileChooser.APPROVE_OPTION){
File f=jfc.getSelectedFile();
try {
FileOutputStream fsp=new FileOutputStream(f);
BufferedOutputStream out=new BufferedOutputStream(fsp);
//将文本内容转换为字节存到字节数组
byte[] b=(ta.getText()).getBytes();
//将数组b中的全部内容写到out流对应的文件中
out.write(b, 0, b.length);
out.close();
} catch (FileNotFoundException e1) {
System.out.println("系统没有找到此文件");
} catch (IOException e1) {
System.out.println("IOException");
}
}
}
}
public static void main(String[] args) {
FileChooserDemo fc=new FileChooserDemo();
}
}
3.show*Dialog()打开和保存文件
package com.jfileChooser;
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileSystemView;
public class FileChooser1 {
public static void main(String[] args) {
JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
int returnValue = jfc.showOpenDialog(null);
//int returnValue = jfc.showSaveDialog(null);
if (returnValue == JFileChooser.APPROVE_OPTION) {
File selectedFile = jfc.getSelectedFile();
System.out.println(selectedFile.getAbsolutePath());
}
}
}
4.使用setFileSelectionMode(int) 选择文件或目录
package com.jfileChooser;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileSystemView;
public class FileChooser2 {
public static void main(String[] args) {
JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
jfc.setDialogTitle("选择文件目录保存文件 ");
jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int returnValue = jfc.showSaveDialog(null);
if (returnValue == JFileChooser.APPROVE_OPTION) {
if (jfc.getSelectedFile().isDirectory()) {
System.out.println("你选择的文件目录是: " + jfc.getSelectedFile());
}
}
}
}
5.使用setMultiSelectionEnabled(Boolean)选择多个路径
package com.jfileChooser;
import java.io.File;
import java.util.Arrays;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileSystemView;
//选择多个文件
public class FileChooser3 {
public static void main(String[] args) {
JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
jfc.setDialogTitle("同时选取多个文件目录");
jfc.setMultiSelectionEnabled(true);
jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
int returnValue = jfc.showOpenDialog(null);
if (returnValue == JFileChooser.APPROVE_OPTION) {
File[] files = jfc.getSelectedFiles();
System.out.println("已找到目录\n");
Arrays.asList(files).forEach(x -> {
if (x.isDirectory()) {
System.out.println(x.getName());
}
});
System.out.println("\n- - - - - - - - - - -\n");
System.out.println("已找到目录\n");
Arrays.asList(files).forEach(x -> {
if (x.isFile()) {
System.out.println(x.getName());
}
});
}
}
}
6.使用过滤器Filters限制文件选择器中显示的文件类型
package com.jfileChooser;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.filechooser.FileSystemView;
public class FileChooser4 {
public static void main(String[] args) {
JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
jfc.setDialogTitle("选择图片");
jfc.setAcceptAllFileFilterUsed(false);
//限制文件只能显示PNG\JPG格式的图片
FileNameExtensionFilter filter = new FileNameExtensionFilter("PNG and JPG images", "png", "jpg");
jfc.addChoosableFileFilter(filter);
int returnValue = jfc.showOpenDialog(null);
if (returnValue == JFileChooser.APPROVE_OPTION) {
System.out.println(jfc.getSelectedFile().getPath());
}
}
}
7.使用showDialog()自己设置按钮信息
package com.jfileChooser;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileSystemView;
public class FileChooser5 {
public static void main(String[] args) {
JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
jfc.setDialogTitle("演示");
int returnValue = jfc.showDialog(null, "选择");
if (returnValue == JFileChooser.APPROVE_OPTION) {
System.out.println(jfc.getSelectedFile().getPath());
}
}
}