输入和输出流__文件对话框 JFileChooser

使用文件对话框 指定输入输出文件 是一个常用功能。 本博文介绍 用文件对话框 打开和保存 文件的方法

使用javax.swing.JFileChooser 实现打开和保存文件对话框

一. JFileChooser 类的常用方法

showOpernDialog()     打开 "打开文件对话框"

showSaveDialog()       打开  "保存文件对话框"

文件对话框打开后,在用户按下按钮或关闭对话框时,上述两个方法会返回一个整数值,分别为:

JFileChooser.APPROVE_OPTION :          “撤消” 按钮

JFileChooser.CANCEL_OPTION:             "打开/保存" 按钮

JFileChooser.ERROR_OPTION:               出错,或是对话框非正常关闭

二. 当程序发现用户选择了文件并按下了 "打开/保存" 按钮后,程序就可以利用 getSelectedFile()  取得文件对象, 并利用这个文件对象用方法 getName() 取得文件的名称, 用方法getPath()  取得文件的路径.

看一个例子,  程序首先弹出一个界面,有两个按钮:打开文件和保存文件。 当点击 打开文件时,弹出一个打开文件对话框;  当点击保存文件时, 弹出保存文件对话框。 程序设置了文件对话框的筛选条件。

程序入口:

public class Example9_6 {
	
	public static void main(String[] args) {
		FrameFileDialog f = new FrameFileDialog();
	}

} 

FrameFileDialog 类:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class FrameFileDialog extends JFrame implements ActionListener {

	
	JFileChooser filedialog = null;
	JLabel label = new JLabel("", JLabel.CENTER);
	JButton b1, b2;
	JTextArea text;
	
	public FrameFileDialog() {
		super("带文件对话框的窗口");
		Container container = this.getContentPane();
		container.setLayout(new BorderLayout());
		container.setSize(100, 80);
		
		JPanel p = new JPanel();
		b1 = new JButton("打开文件");
		b2 = new JButton("保存文件");
		b1.addActionListener(this);
		b2.addActionListener(this);
		p.add(b1);
		p.add(b2);
		
		text = new JTextArea(20, 30);
		JScrollPane jScrollPane = new JScrollPane();
		filedialog = new JFileChooser(); //"D:\\Download"
		//  建立一个FileChooser 对象,并指定目录为默认文件对话框路径
		filedialog.setControlButtonsAreShown(true); //显示打开和撤消按钮
		filedialog.addChoosableFileFilter(new MyFileFilter("txt"));
		
		filedialog.addChoosableFileFilter(new MyFileFilter("java"));
		text.setBackground(Color.cyan);
		container.add(jScrollPane, BorderLayout.CENTER);
		container.add(label,BorderLayout.NORTH);
		container.add(p, BorderLayout.SOUTH);
		setVisible(true);
		pack();
	
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		File file = null;
		int result;
		if(e.getSource() == b1) {
			filedialog.setDialogTitle("打开文件");
			result = filedialog.showOpenDialog(this);
			text.setText("");
			
			if(result == JFileChooser.APPROVE_OPTION) {
				file = filedialog.getSelectedFile();
				label.setText("你选择打开的文件名称是: " + file.getName());
				
				//以下是打开文件 过程, 以notepad 记事本方式 打开
				Runtime r = Runtime.getRuntime();
		        Process p = null;
		        String cmd[] = { "notepad", file.getAbsolutePath()};
		        try {
		            p = r.exec(cmd);
		        } catch (Exception ex) {
		        	label.setText("error executing " + cmd[0]);
		        }
			}else if(result == JFileChooser.CANCEL_OPTION){
				label.setText("你没有选择任何文件");
			}
			FileInputStream fileInputStream;
			if(file != null) {
				try {
					fileInputStream = new FileInputStream(file);
				} catch (FileNotFoundException e1) {
					label.setText("文件没有找到");
					e1.printStackTrace();
					return;
				}
				int readByte;
				try {
					while((readByte = fileInputStream.read()) != -1){
						text.append(""+(char)readByte);
					}
					fileInputStream.close();
				} catch (IOException e1) {
					label.setText("读取文件出错");
					e1.printStackTrace();
				}
			}
		}else if(e.getSource() == b2) { //保存文件
			filedialog.setDialogTitle("保存文件");
			result = filedialog.showSaveDialog(this);
			file = null;
			String fileName;
			if(result == JFileChooser.APPROVE_OPTION) {
				file = filedialog.getSelectedFile();
				label.setText("你选择保存的文件名称是: "+ file.getName());
			}else if(result == JFileChooser.CANCEL_OPTION) {
				label.setText("你没有选择任何文件");
			}
			
			FileOutputStream fos;
			if(file != null){
				try {
					fos = new FileOutputStream(file);
				} catch (FileNotFoundException e1) {
					label.setText("文件没有发现");
					e1.printStackTrace();
					return;
				}
				String content = text.getText();
				try {
					
					fos.write(content.getBytes());
					fos.close();
				} catch (IOException e1) {
					label.setText("写文件出错");
					e1.printStackTrace();
				}
			}
		}
	}

}

MyFileFilter 类:

import java.io.File;

import javax.swing.filechooser.FileFilter;

public class MyFileFilter extends FileFilter {

	String ext;
	public MyFileFilter(String t) {
		ext = t;
	}
	
	@Override
	public boolean accept(File f) {
		if(f.isDirectory())
			return true;
		String fn = f.getName();
		int index = fn.lastIndexOf('.');
		if(index > 0 && index < fn.length() -1) {
			String extension = fn.substring(index+1).toLowerCase();
			if(extension.equals(ext)) 
				return true;
		}
		return false;
	}

	@Override
	public String getDescription() {
		if(ext.equals("java")){
			return "JAVA Source File(*.java)";
		}else if("txt".equals(ext)){
			return "Txt File(*.txt)";
		}
		return "";
	}

}

运行效果

在打开文件对话框中, 可以设置筛选条件, 即指定文件的类型. 使用FileFilter类,该类预设两个方法,分别是 accept(File f) 与getDescription() . 当目录中的文件与筛选条件相符时,方法accept() 返回true, 并将此文件名显示在对话框中。而getDescription() 方法则是对筛选条件的描述. 由程序指定,例如, "*.java" 等. 如图

 由于FileFilter 类是一个抽象类,程序要设置打开文件对话框的文件筛选条件,必须继承这个类.实现上面两个方法, 然后就可以使用 JFileChooser类的addChoosableFileFilter() 方法, 或者是setFileFilter() 方法设置筛选条件.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值