import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.IOException;
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;
/*
* JFileChooser 是 Java Swing 框架中的文件选择器,
* 在应用程序中经常会遇到打开文件和保存文件等操作, 文件选择器 JFileChooser 是专门应对这种情况而出现的
*/
public class TestSave extends JFrame {
private JPanel contentPane;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TestSave frame = new TestSave();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
@SuppressWarnings("restriction")
public TestSave() {
try {
UIManager.setLookAndFeel(new WindowsLookAndFeel());
} catch (UnsupportedLookAndFeelException e) {
e.printStackTrace();
}
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JButton btnSave = new JButton("Save");
btnSave.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
//创建一个JFileChooser对象
JFileChooser chooser=new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"EXCEL文件(*xls)", "xls");
chooser.setFileFilter(filter);
chooser.setFileFilter(filter);
String defaultFileName="侬好呀"+" .xls" ;
chooser.setSelectedFile(new File(defaultFileName)); //设置默认文件名
/**
* 弹出一个保存文件的对话框
* 需要指定一个父级窗体,或指定为 null
* 返回值是 int 类型,创建以接收返回值
*/
int value=chooser.showSaveDialog(TestSave.this);
System.out.println(value);
/**
* 如果返回 APPROVE_OPTION,也可以使用对象调用,即 chooser.APPROVE_OPTION
* 说明有文件被成功返回,即成功保存文件
* 这里实际上是将一个不存在的文件包装成了一个假设存在的文件,然后将之返回
* 但该文件并没有真实的被创建,仅仅是创建了一个文件对象,并可设定路径
* 需要使用 createNewFile() 创建文件
*/
if (value==JFileChooser.APPROVE_OPTION) {
//打印返回文件的绝对路径
//System.out.println(chooser.getSelectedFile().getAbsolutePath());
try {
File newFile=chooser.getSelectedFile();
if (!newFile.exists()) {
newFile.createNewFile();
System.out.println(newFile.getAbsolutePath());
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
});
btnSave.setFocusable(false);
contentPane.add(btnSave, BorderLayout.NORTH);
}
}
运行结果:
import java.awt.Component;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.filechooser.FileNameExtensionFilter;
public class Main extends JFrame{
public static void main(String[] args) {
// TODO Auto-generated method stub
Main m = new Main();
//ButtonListener l = new ButtonListener(m);
m.InitUI();
String file_Name = "C:\\Users\\25280\\Desktop\\Test.txt";
m.OpenFile(file_Name);
}
public void InitUI()
{
this.setTitle("文件读写");
this.setSize(700, 600);
this.setDefaultCloseOperation(3);
this.setResizable(false);
this.setLocationRelativeTo(null);
this.setLayout(null);//关闭流式布局
JButton button1 = new JButton("打开文件");
button1.setBounds(200,500, 100, 50);
button1.setContentAreaFilled(false); //消除按钮背景颜色
button1.setOpaque(false); //除去边框
button1.setFocusPainted(false);//出去突起
this.add(button1);
JButton button2 = new JButton("保存文件");
button2.setBounds(400,500, 100, 50);
button2.setContentAreaFilled(false); //消除按钮背景颜色
button2.setOpaque(false); //除去边框
button2.setFocusPainted(false);//出去突起
this.add(button2);
JTextArea messArea = new JTextArea();
//messArea.setSize(300, 200);
messArea.setBounds(50, 50, 600, 400);
this.add(messArea);
ButtonListener BL = new ButtonListener(this,messArea);
button1.addActionListener(BL);
button2.addActionListener(BL);
this.setVisible(true);//设置窗体可见
}
public void OpenFile(String file_Name)
{
// File file = new File(file_Name);
// Reader reader = null;
// try {
// System.out.println("以字符为单位读取文件内容,一次读一个字节:");
// // 一次读一个字符
// reader = new InputStreamReader(new FileInputStream(file));
// int tempchar;
// while ((tempchar = reader.read()) != -1) {
// // 对于windows下,\r\n这两个字符在一起时,表示一个换行。
// // 但如果这两个字符分开显示时,会换两次行。
// // 因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。
// if (((char) tempchar) != '\r') {
// System.out.print((char) tempchar);
//
// }
// }
// reader.close();
// } catch (Exception e) {
// e.printStackTrace();
// }
File file = new File(file_Name);
InputStream in = null;
try {
System.out.println("以字节为单位读取文件内容,一次读一个字节:");
// 一次读一个字节
in = new FileInputStream(file);
int tempbyte;
System.out.println(in.available());
System.out.println(tempbyte = in.read());
while ((tempbyte = in.read()) != -1) {
System.out.print(tempbyte);
}
in.close();
} catch (IOException e) {
e.printStackTrace();
return;
}
}
public void showFileOpenDialog(Component parent, JTextArea msgTextArea)
{
JFileChooser fc = new JFileChooser();
fc.setCurrentDirectory(new File("."));//设置默认显示为当前文件夹
fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);//设置选择模式(只选文件、只选文件夹、文件和文件均可选)
fc.setMultiSelectionEnabled(true);//是否允许多选
fc.addChoosableFileFilter(new FileNameExtensionFilter("zip(*.zip, *.rar)", "zip", "rar"));//文件过滤器
fc.setFileFilter(new FileNameExtensionFilter("image(*.jpg, *.png, *.gif)", "jpg", "png", "gif"));
int result = fc.showOpenDialog(parent);
if(result == JFileChooser.APPROVE_OPTION)
{
File file = fc.getSelectedFile();//获取打开的文件
msgTextArea.append("打开文件:"+file.getAbsolutePath()+"\n\n");
Reader reader = null;
try {
System.out.println("以字符为单位读取文件内容,一次读一个字节:");
// 一次读一个字符
reader = new InputStreamReader(new FileInputStream(file));
int tempchar;
while ((tempchar = reader.read()) != -1) {
// 对于windows下,\r\n这两个字符在一起时,表示一个换行。
// 但如果这两个字符分开显示时,会换两次行。
// 因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。
if (((char) tempchar) != '\r') {
System.out.print((char) tempchar);
// String str = ""+tempchar;
msgTextArea.append((tempchar)+"");
}
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void showFileSaveDialog(Component parent, JTextArea msgTextArea) {
// 创建一个默认的文件选取器
JFileChooser fileChooser = new JFileChooser();
// 设置打开文件选择框后默认输入的文件名
fileChooser.setSelectedFile(new File("测试文件.zip"));
// 打开文件选择框(线程将被阻塞, 直到选择框被关闭)
int result = fileChooser.showSaveDialog(parent);
if (result == JFileChooser.APPROVE_OPTION) {
// 如果点击了"保存", 则获取选择的保存路径
File file = fileChooser.getSelectedFile();
msgTextArea.append("保存到文件: " + file.getAbsolutePath() + "\n\n");
}
}
}
//监听器类:
package FileRead.com.Write;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFileChooser;
import javax.swing.JTextArea;
public class ButtonListener implements ActionListener{
private Main m ;
private JTextArea msgTextArea;
public ButtonListener(Main m, JTextArea msgTextArea) {
super();
this.m = m;
this.msgTextArea = msgTextArea;
}
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("打开文件"))
{
m.showFileOpenDialog(m, msgTextArea);
}
else if(e.getActionCommand().equals("保存文件"))
{
m.showFileSaveDialog(m, msgTextArea);
}
}
}
运行效果如下: