GUI界面可以打开保存等操作。
import java.awt.Dimension;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
/*
* 记事本
*/
public class Notepad extends JFrame{
private JTextArea txtArea = new JTextArea();
//定义成员变量文件对象,用于保存打开的文件对象
File selectedFile;
//如果"打开"操作,会将打开的文件路径覆盖此路径;如果此路径为空,可以保存为新文件;
//创建文件选择器对象,用于展示打开和保存界面,从而选择文件
JFileChooser chooser = new JFileChooser();
public Notepad(){
init();
addComponent();
}
private void init() {
//设置窗体初始大小
this.setSize(500, 500);
//设置窗体居中
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension size = kit.getScreenSize();
int x = (size.width - this.getWidth()) / 2;
int y = (size.height - this.getHeight()) / 2;
this.setLocation(x, y);
//设置默认关闭行为
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//设置标题
this.setTitle("我的记事本");
}
public void addComponent(){
//添加菜单
MenuBar bar = new MenuBar();
//文件菜单
Menu fileMenu = new Menu("文件");
//菜单项
MenuItem openItem = new MenuItem("打开");
//"打开"事件
openItem.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
try {
openMenuItemClick();
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
MenuItem saveItem = new MenuItem("保存");
//"保存"事件
saveItem.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
try {
saveMenuItemClick();
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
MenuItem closeItem = new MenuItem("退出");
//"关闭"事件
closeItem.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}});
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(closeItem);
bar.add(fileMenu);
this.setMenuBar(bar);
//添加文本域
JScrollPane sp = new JScrollPane();
sp.setViewportView(this.txtArea);
this.add(sp);
}
//"打开"事件处理函数
private void openMenuItemClick() throws IOException {
//打开文件选择器,选择文件
// JFileChooser chooser = new JFileChooser();
//过滤扩展名
//创建文件名过滤器对象
FileFilter filter = new FileNameExtensionFilter
("txt","txt");
chooser.setFileFilter(filter);
//展示打开文件选择器
//返回用户的选择结果
int userChoose = chooser.showOpenDialog(this);
//如果用户选择打开,则读取内容,否则返回
if(userChoose == JFileChooser.CANCEL_OPTION) {
return;
}
//读取文件内容
selectedFile = chooser.getSelectedFile();
if(selectedFile!=null&&selectedFile.isFile()) {
//创建IO流对象
FileReader fr = new FileReader(selectedFile);
//定义数组,记录本次读取到的字符内容
char[] chars = new char[1024];
//定义变量,记录本次读取到的字符个数
int len;
//读取内容
while((len=fr.read(chars))!=-1) {
//将本次读取到的内容转为字符串
String thisS = new String(chars,0,len);
//将内容添加到GUI的文本域组件中
txtArea.append(thisS);
}
//关闭流
fr.close();
}
}
//"保存"事件处理函数
private void saveMenuItemClick() throws IOException{
//判断成员位置是否已经存在File对象
if(selectedFile!=null) {
//获取文件内容
String data = txtArea.getText();
//写出文件内容
//创建IO流对象
FileWriter fw = new FileWriter(selectedFile);
//写出内容
fw.write(data);
//关闭流
fw.close();
}else {//如果是新建的文件
//打开文件选择器,选择文件
//过滤扩展名
//创建文件名过滤器对象
FileFilter filter = new FileNameExtensionFilter
("txt","txt");
chooser.setFileFilter(filter);
File newFile = new File("新建文本文件");
//为文件选择器设置默认文件名
chooser.setSelectedFile(newFile);
//展示 保存文件选择器
int userChoose = chooser.showSaveDialog(this);
//如果用户选择保存,则写出内容,否则返回
if(userChoose==JFileChooser.APPROVE_OPTION) {
//获取用户选择的文件
File selectedFile2 = chooser.getSelectedFile();
//去掉空白,转为小写判断用户选择的文件是否有.txt扩展名,如果没有加上.txt
if(!selectedFile2.getName().trim().toLowerCase().endsWith(".txt")) {
selectedFile2 = new File(selectedFile2.getParent(),selectedFile2.getName()+".txt");
}
//获取用户选择文件所在目录
File parentDIR = selectedFile2.getParentFile();
//遍历当前文件夹,判断是否有重名的文件
File[] listFiles = parentDIR.listFiles();
//依次获取文件夹中每一文件对象与保存的文件对象名称做对比
for (File file : listFiles) {
if(file.getName().equals(selectedFile2.getName())) {
//提示有重复文件,是否覆盖
int isCover = JOptionPane.showConfirmDialog(this, "当前目录已经存在相同名称的文件,是否覆盖?");
if(isCover==JOptionPane.OK_OPTION) {
//获取文件内容
String data = txtArea.getText();
//写出文件内容
//创建IO流对象
FileWriter fw = new FileWriter(selectedFile2);
//写出内容
fw.write(data);
//关闭流
fw.close();
}else {
return;
}
}
}
//如果没有重复文件,直接写出即可
//获取文件内容
String data = txtArea.getText();
//写出文件内容
//创建IO流对象
FileWriter fw = new FileWriter(selectedFile2);
//写出内容
fw.write(data);
//关闭流
fw.close();
}
}
}
public static void main(String[] args){
new Notepad().setVisible(true);
}
}