目标:

学习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. remeber me即记住我功能

    1.登录过程中的记住我功能如图: 2.这样在登录认证的时候,客户端会传递两个cookie:remember_token和Tsession 3.即使客户端不传递cookie中的Tsession,只传递r ...

  2. Unity定制 Image、Text的对象生成

    2016.4.14 昨天看到 雨凇的 Unity3D研究院之UGUI一个优化效率小技巧:  http://www.xuanyusong.com/archives/4006 完好了他所说的代码: usi ...

  3. [转载]DLL劫持生成器 源码开放(纯WINDOWS SDK)+ 实例分析

    本菜最近学习了什么DLL注入啊,hook啊(r3)的相关技术,觉得很好玩,于是深入发现还有DLL劫持这种东西觉得挺好玩的,加上最近看到各种木马分析报告中都还有发现有利用白加黑的现象.于是自己想找几个来 ...

  4. log4j教程 7、日志记录级别

    org.apache.log4j.Level类提供以下级别,但也可以通过Level类的子类自定义级别. Level 描述 ALL 各级包括自定义级别 DEBUG 指定细粒度信息事件是最有用的应用程序调 ...

  5. 【Hadoop】Hadoop MR 自定义序列化类

    1.基本概念 2.Mapper代码 package com.ares.hadoop.mr.flowsum; import java.io.IOException; import org.apache. ...

  6. 安装Linux centos 时编辑选项

    将第上一步选择编辑之后出来的文字修改为:>vmlinuz initrd=initrd.img linux dd quiet 这里注意了:网上很多文章都说这一步改成“>vmlinuz ini ...

  7. [linux]iostat命令详解-监视系统输入输出设备和CPU的使用情况

    部分转载https://blog.csdn.net/sunansheng/article/details/51942281 iostat命令被用于监视系统输入输出设备和CPU的使用情况.它的特点是汇报 ...

  8. svn上传代码时出现:Authorization failed

    出现该问题基本都是三个配置文件的问题,下面把这个文件列出来 svnserve.conf:[general]anon-access = readauth-access = writepassword-d ...

  9. 解决eclipse中overlaps the location of another project: 'xxxx'

    找遍网络发现各种解释,最常见的一种是: new -> android project -> create project from exist source出现如下错误信息:Invalid ...

  10. Delphi中定义了四种布尔类型:Boolean,ByteBool,WordBool和LongBool。后面三种布尔类型是为了与其他语言兼容而引入的

    bool是LongBool类型. Delphi中定义了四种布尔类型:Boolean,ByteBool,WordBool和LongBool.后面三种布尔类型是为了与其他语言兼容而引入的,一般情况下建议使 ...