目标:

学习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. 天地图应用ArcGIS发布的服务(转)

    天地图应用ArcGIS发布的服务 本文包含三个部分:利用ArcMap将Excel的数据转化为ArcGIS MXD文件.利用ArcMap发布服务.天地图添加ArcGIS发布的服务. 一 MXD文件的生成 ...

  2. 2017年开发者生态报告:Python最多人想尝试的编程语言(转载)

    在过去的十年里,Python 语言获得了最大的增长幅度,已经成为最受欢迎的程序设计语言之一.JetBrains 近日发布了 2017 开发者生态报告,该报告包含开发人员对 11 种编程语言以及数据库和 ...

  3. 基于HDFS的SparkStreaming案例实战和内幕源码解密

    一:Spark集群开发环境准备 启动HDFS,如下图所示: 通过web端查看节点正常启动,如下图所示: 2.启动Spark集群,如下图所示: 通过web端查看集群启动正常,如下图所示: 3.启动sta ...

  4. linux fork的缺点

    Disadvantage of fork linux环境下, JBoss中调用curl下载文件,  发现curl占用的内存和JBoss一样多. Historical Background and Pr ...

  5. JStorm的Metrics含义

    附录:Metrics含义 MemoryUsed cluster/topology/worker使用到的物理内存HeapMemory cluster/topology/worker JVM使用到的堆内存 ...

  6. Jquery.data()的值存放再什么地方的问题?

    Where is jQuery.data() stored? Where does jQuery store the values of the data() that it sets to DOM ...

  7. sql取随机结果集

    应用场景: 某日,接产品姐姐需求,网站搜索页在搜索特定的内容时候,会现实搜索不到结果!如衣服网站,搜索鞋子等.为了不直接呈现一个赤裸裸的无此商品页面,so,需要在搜索商品件数小于3时,在下面随机推荐本 ...

  8. android中Invalidate和postInvalidate的差别

    Android中实现view的更新有两组方法,一组是invalidate.还有一组是postInvalidate.当中前者是在UI线 程自身中使用,而后者在非UI线程中使用. Android提供了In ...

  9. Datatable和实体还有实体集List的差别与转化

    机房收费系统大家想必不是做完.就是已经在手上了,在一開始做的时候就明白规定.我们必须用实体.而不能使Datatable,由于说是Datatable直接面向了数据库,当时不是非常明白,于是也没有再深究, ...

  10. rpc接口mock平台

    转载:http://blog.csdn.net/ronghuanye/article/details/71124320 1.简介 平台采用struts.spring.mybatis框架开发设计,主要用 ...