目标:

学习java的IO流和文件的打开保存

内容:

使用javaSwing包里面的一些东西,比如按钮、菜单来进行布局

代码:

package myNotePad;

import java.awt.FileDialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.FeatureDescriptor;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException; import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTextArea;
public class MyNotePad {
public static void main(String[] args) {
final JFrame jFrame = new JFrame("记事本"); JMenuBar jMenuBar = new JMenuBar();
jFrame.setJMenuBar(jMenuBar); // 注意!此处把菜单栏加到框架里面不是调用add方法(卡了40分钟,屏幕不显示窗体) JMenu jMenu1 = new JMenu("文件");
JMenu jMenu2= new JMenu("编辑");
jMenuBar.add(jMenu1); //add方法作用是把一个组件添加到另一个组件中。
jMenuBar.add(jMenu2); JMenuItem jMenuItem1 = new JMenuItem("打开");
JMenuItem jMenuItem2 = new JMenuItem("保存");
jMenu1.add(jMenuItem1);
jMenu1.add(jMenuItem2); final JTextArea jTextArea = new JTextArea();
jFrame.add(jTextArea);
//上面是框架创建完毕 //下面是给"打开"操作写上事件监听器
jMenuItem1.addActionListener(new ActionListener() { //这样写是创建匿名时间监听器对像,也可以自己写一个事件监听器类
@Override
public void actionPerformed(ActionEvent e) {
FileDialog fileDialog = new FileDialog(jFrame, "打开",FileDialog.LOAD);
fileDialog.setVisible(true); //注意,文件对话框默认是隐藏的(卡了10分钟,不显示对话框)
FileReader fileReader=null;
try {
fileReader = new FileReader(fileDialog.getDirectory()+fileDialog.getFile());
//注意:获取文件是 路径名getDirectory()+文件名getFile()!!切记getFile()里不包含路径名 (卡了90分钟,下载别人源码才明白)
} catch (FileNotFoundException e2) {
e2.printStackTrace();
}
if(fileReader!=null){
try(
//7.0版本JDK支持try(){}语法,作用:()内写创建输入输出对象后,就不用在finally中写关闭资源close()方法。
BufferedReader bufferedReader = new BufferedReader(fileReader);
) {
if(fileDialog.getFile()!=null){
fileReader = new FileReader(fileDialog.getDirectory()+fileDialog.getFile());
String str=null;
while((str=bufferedReader.readLine())!=null){ //把读文件写在while里是为了第一次就能判断
jTextArea.append(str);
}
}
}
catch (IOException e1) {
}
}
}
}); //下面是给"保存"操作写上事件监听器
jMenuItem2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
FileDialog fileDialog = new FileDialog(jFrame, "保存", FileDialog.SAVE);
fileDialog.setVisible(true);
FileWriter fileWriter=null;
try {
fileWriter = new FileWriter(fileDialog.getDirectory()+fileDialog.getFile(),true);
//上一句代码用到了追加功能,防止再次写入覆盖原来的内容FileWriter(String fileName, boolean append)(卡了3分钟)
} catch (IOException e2) {
e2.printStackTrace();
}
if(fileWriter!=null){
try (BufferedWriter bf=new BufferedWriter(fileWriter)) {
String text = jTextArea.getText();
// char[] charArray = text.toCharArray();
bf.write(text); } catch (IOException e1) {
e1.printStackTrace();
}
}
}
});
jFrame.setSize(400, 400);
jFrame.setLocation(600, 300);
jFrame.setVisible(true);
} }

运行:

思考和总结:

对事件的监听有了更深的了解

简单记事本&Java的更多相关文章

  1. 编写运行最简单的java程序——使用记事本编写java程序

    第一个java程序--使用记事本编辑 经过上篇文章的java环境搭建成功的小伙伴们可以在自己的计算机上编写属于自己的java程序了yo~ 还没有搭建环境变量的小伙伴请转移到上一篇的随笔中去完成搭建. ...

  2. 简单记事本的基本实现&十四周总结

    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...

  3. 用命令提示符运行简单的Java程序报错

    首先用记事本写一个最简单的Java代码,我把文件保存在桌面的HelloWorld文件夹中,这里将记事本的名称改为HelloWorld.java public class HelloWorld{ pub ...

  4. java基础学习02(简单的java程序)

    简单的java程序 一.完成的目标 1. 理解java程序的基本组成 2. 如何对程序代码进行注释 3. java标识符的命名规则 4. 了解java中的关键字 5. 使用java定义变量或声明变量 ...

  5. Linux环境下部署完JDK后运行一个简单的Java程序

    前言 前一篇文章详细讲解了如何在Windows环境下安装虚拟机+Linux系统,并且成功部署了JDK. 不过部署完JDK之后,我们判断部署是否成功的依据是看"java -version&qu ...

  6. 一个简单的Java web服务器实现

    前言 一个简单的Java web服务器实现,比较简单,基于java.net.Socket和java.net.ServerSocket实现: 程序执行步骤 创建一个ServerSocket对象: 调用S ...

  7. 三、使用Maven构建简单的java项目

    前边,我刚搭建了Maven环境,还有给大家推荐了学习资源,这个小节,我们来就来,,简单的玩玩maven. 1.所需工具: 1.Eclipse     2.apache-maven-3.3.9   3. ...

  8. JNI_最简单的Java调用C/C++代码

    JNI_最简单的Java调用C/C++代码 JNI.是Java Native Interface的简称,中文是"Java本地调用".通过这种技术能够做到下面两点: Java程序中的 ...

  9. 最简单的Java框架

    框架framework的目的是定义骨架式方案,处理各种相同的底层细节:而开发人员使用框架时,能够依照自己的需求实现自己的功能--仅仅须要填入自己的东西/flesh. 最简单的框架,类似于JUnit,它 ...

随机推荐

  1. linux系统清理僵尸进程记录

    在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程.  在fork()/execve()过程中,假设子进程结束时父进程仍存在, ...

  2. MIT算法导论笔记

    详细MIT算法导论笔记 (网络链接) 第一讲:课程简介及算法分析 (Sheridan) 第二讲:渐近符号.递归及解法  (Sheridan) 第三讲:分治法(1)(Sheridan) 第四讲:快排及随 ...

  3. ieda常用快捷键

    Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 “!”键Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件Shift+Click,可以关闭文件Ctrl+[ ...

  4. sass的高级语法

    1. 变量 sass允许使用变量,所有变量以$开头 2.引用父元素 & 这里 "&" 就代表是 a 3.继承 这样  class2 就 拥有了class1的所有属性 ...

  5. 蓝的成长记——追逐DBA(5):不谈技术谈业务,恼人的应用系统

    ***************************************声明*************************************** 个人在oracle路上的成长记录,当中 ...

  6. iOS学习笔记之蓝牙(有关蓝牙设备mac地址处理)

    原文: http://blog.sina.com.cn/s/blog_6f2f0bed0102xn0e.html

  7. cocos2d-x 3.0 回调函数

    參考文章: http://blog.csdn.net/crayondeng/article/details/18767407 http://blog.csdn.net/star530/article/ ...

  8. 【Excle数据透视表】如何重复显示行字段的项目标签

    前提:该数据透视表以表格形式显示 解决办法: 通过报表布局设置"重复所有项目标签" 修改前样式 步骤 单击数据透视表中任意单元格→设计→报表布局→重复所有项目标签 修改后样式

  9. cisco 为每个单独的人员设置不同的用户名和密码

    cisco 为每个单独的人员设置不同的用户名和密码 2010-12-15 17:00:16 分类: 系统运维 Router1#configure terminalEnter configuration ...

  10. CoreImage的模糊滤镜

    //1.原始图片 UIImage * image = [UIImage imageNamed:@"1.jpg"]; /****************core image***** ...