51,411
社区成员
发帖
与我相关
我的任务
分享/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author Tone
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFileChooser;
import java.io.*;
import javax.swing.filechooser.FileNameExtensionFilter;
//继承 实现
public class myFrameJSB extends WindowAdapter implements MouseListener {
//声明一个窗体,通过new调用构造函数并赋值
Frame fr = new Frame("2204130136");
//定义一个BorderLayout布局管理器
BorderLayout bl = new BorderLayout();
//定义一个多行文本框ta
TextArea ta = new TextArea("欢迎你使用记事本");
//定义一个容器:p1
Panel pl = new Panel();
//定义两个按钮:bopen bsave
Button bopen = new Button("打开文件");
Button bsave = new Button("1保存文件");
//构建两个对话框实例并放入窗体中
FileDialog fdopen = new FileDialog(fr, "打开文件对话框", FileDialog.LOAD);//可以设置保存文档的类型
FileDialog fdsave = new FileDialog(fr, "保存文件对话框", FileDialog.SAVE);
JFileChooser fileChooser = new JFileChooser();
//使用main方法,传入入参表
public static void main(String[] args) {
//构建go实例
new myFrameJSB().go();
}
//go方法
public void go() {
//在窗体中载入名为bl的窗体布局管理器
fr.setLayout(bl);
//添加fr窗体的监听器,启动监听
fr.addWindowListener(this);
//定义一个多行文本框的字符集,字符类型(字体)为Times New Roman,印刷体,20号字
ta.setFont(new Font("Times New Roman", Font.PLAIN, 20));
//将文本框ta添加到窗体中间
fr.add("Center", ta);
//把容器pl放到窗体的下方
fr.add("South", pl);
//在pl容器里添加按钮bopen
pl.add(bopen);
//bopen按钮添加鼠标监听器,启动监听
bopen.addMouseListener(this);
//在容器pl里添加按钮bsave
pl.add(bsave);
//按钮bsave添加鼠标监听器,启动监听
bsave.addMouseListener(this);
//设置样式
fr.setSize(400, 400);
fr.setVisible(true);
}
//定义鼠标的事件
public void mouseClicked(MouseEvent e) {
if (e.getSource() == bopen) {
//将打开文件对话框显示出来
fdopen.setVisible(true);
//构建一个类实例
File file = new File(fdopen.getDirectory() + fdopen.getFile());
//新建一个读取实例 赋空值(无存储空间)
Reader reader = null;
//构建变量
int tempchar;
//有存储空间的空值
String strStr = "";
//异常处理 数据被迫中断时
try {
//构建reader实例,使文件按照字符流的方法读取
reader = new InputStreamReader(new FileInputStream(file));
while ((tempchar = reader.read()) != -1) {
//添加数据类型转换 将int 转换为char 判断输入文字是否回行
if (((char) tempchar) != '\r') {
strStr = strStr + (char) tempchar;
}
}
reader.close();
} //捕获异常
catch (Exception e1) {
e1.printStackTrace();
}
//导入多行文本框
ta.setText(strStr);
//finally 存在多个异常时可以添加
} else if (e.getSource() == bsave) {
//显示“保存按钮”的窗体
// fdsave.setVisible(true);
//构建一个文件对象file,用new调用它的构造函数,获得文件地址(目录)
//File file = new File(fdsave.getDirectory() + fdsave.getFile());
//添加保存的类型(*.txt)
MyFileFilter txtFilter = new MyFileFilter(".txt", "txt 文件 (*.txt)");
fileChooser.addChoosableFileFilter(txtFilter);
//fileChooser.showSaveDialog(null);
int fresult;
fresult = fileChooser.showSaveDialog(null);
if (fresult == JFileChooser.APPROVE_OPTION) { // 用户点击了“确定”按钮
File file = fileChooser.getSelectedFile(); //获得文件名
// 获得被选中的过滤器
MyFileFilter filter = (MyFileFilter) fileChooser.getFileFilter();
// 获得过滤器的扩展名
String ends = filter.getEnds();
File newFile = null;
if (file.getAbsolutePath().toUpperCase().endsWith(ends.toUpperCase())) {
// 如果文件是以选定扩展名结束的,则使用原名
newFile = file;
} else {
// 否则加上选定的扩展名
newFile = new File(file.getAbsolutePath() + ends);
}
// 以下用 newFile 完成保存文件的操作
// fileChooser.
//声明一个实例Writer(将对象转换为实例才能使用也就是赋值)
Writer writer = null;
//构建一个字符串变量strStr
String strStr = "";
//异常处理:处理数据被迫中断(死机)
try {
//构建一个实例,输出数据到一个基于文件的流
writer = new OutputStreamWriter(new FileOutputStream(newFile));
strStr = ta.getText();
//数据导出
writer.write(strStr);
ta.setText("写入成功!");
//内存释放
writer.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
//关闭窗体
public void windowClosing(WindowEvent e) {
fr.dispose();
//System.Exit(0);
}
}
class MyFileFilter extends javax.swing.filechooser.FileFilter {
String ends; // 文件后缀
String description; // 文件描述文字
public MyFileFilter(String ends, String description) { // 构造函数
this.ends = ends; // 设置文件后缀
this.description = description; // 设置文件描述文字
}
@Override
// 只显示符合扩展名的文件,目录全部显示
public boolean accept(File file) {
if (file.isDirectory()) {
return true;
}
String fileName = file.getName();
if (fileName.toUpperCase().endsWith(this.ends.toUpperCase())) {
return true;
}
return false;
}
@Override
// 返回这个扩展名过滤器的描述
public String getDescription() {
return this.description;
}
// 返回这个扩展名过滤器的扩展名
public String getEnds() {
return this.ends;
}
}
