大三了。大神之路,任重而道远。技术博客的开篇,就是给自己一个任务,我是要成为码神的男人。听说一个好的程序员有三个标准,精通一门语言,掌握面向对象的编程方法,掌握数据库。为了这三个目标而努力。数据结构和算法就我估计得两个月之后才开始接触。现在先学java。嗯。就这样。朝着码神的路一路狂奔。

      那就先写一个小程序。用java写一个小的记事本程序。下面贴代码。代码里面有注释。

package com.jishiben;
//刚开始必须引进程序中必须要用的包
import javax.swing.*;

import java.awt.*;
import java.io.*;
import java.awt.Event;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
//1.1别忘了继承JFrame
//2.1现在要开始监听了
public class Jshiben extends JFrame implements ActionListener{
    //1.2这里应该要引入开发记事本需要用到的几个组件
	JTextArea jta=null;
	JMenuBar jmb=null;
	JMenu    jm=null;
	JMenuItem jmi=null;
	JMenuItem jmi2=null;
	public static void main(String[] arg){
		//1.3构建实例
		Jshiben jsb=new Jshiben();
	}
	//1.4建立构造函数
	public Jshiben(){
		//1,5初始化上面提到的组件
		jta=new JTextArea();
		jmb=new JMenuBar();
		jm=new JMenu("文件(\f)");
		jmi=new JMenuItem("打开",new ImageIcon("lufei.jpg"));
		jmi2=new JMenuItem("保存",new ImageIcon("lufei.jpg"));
		//注册监听,顺便发个信息给框架,给它说说用户按了哪个键
	    jmi.addActionListener(this);
	    jmi.setActionCommand("打开");
	    jmi2.addActionListener(this);
	    jmi2.setActionCommand("保存");
		//1.6开始一个个添加组件。
		//1.7请注意到添加菜单条并不是用add而是用setJMenuBar
		this.setJMenuBar(jmb);
		this.add(jta);
		jmb.add(jm);
		//1.8心碎,为什么设置助记符一定要用单引号而用双引号就过不了呢
		jm.setMnemonic('f');
		jm.add(jmi);
		jm.add(jmi2);
		this.setSize(300, 400);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setVisible(true);
		
		
	}
	public void actionPerformed(ActionEvent e) {
		//监听者的耳朵,这时候就应该接受被监听的人传过来的信息并且开始行动了
		if(e.getActionCommand().equals("打开")){
			//哈哈,现在可以尽情偷懒因为有jfilechooser这个神组件
			JFileChooser jfc=new JFileChooser();
			//显示这个组件的打开窗口
			jfc.showOpenDialog(null);
			jfc.setVisible(true);
			//定义一个字符串得到要打开文件的绝对路径
			String str=null;
			if(jfc.getSelectedFile() == null){
				return;
			}
			str=jfc.getSelectedFile().getAbsolutePath();
			
			//定义文件字符流读写文件。
			FileReader fr=null;
			BufferedReader br=null;
			try {
				fr=new FileReader(str);
				br=new BufferedReader(fr);
			    String total="";
			    String s="";
			    while((s=br.readLine() )!= null){
			    	total+=s+"\r\n";
			    }
			    jta.setText(total);
			} catch (Exception e2) {
				e2.printStackTrace();
				// TODO: handle exception
			}finally{
				try {
					br.close();
					fr.close();
				} catch (IOException e1) {
					// TODO 自动生成的 catch 块
					e1.printStackTrace();
				}
				
			}
			
		}
		//和上面大同小异又可以偷懒啦哈哈哈图书馆真TM热。
		else if(e.getActionCommand().equals("保存")){
			//首先定义一个文件选择组件咯
			JFileChooser jfc=new JFileChooser();
			//然后让这个组件显示出来保存的界面咯
			jfc.showSaveDialog(null);
			//再让这个妖怪无所遁形,利用水万物不润的特点让它现形
			jfc.setVisible(true);
			//找到把我们的文本文件保存在那个家里面
			if(jfc.getSelectedFile() == null){
				return;
			}
        	String str=jfc.getSelectedFile().getAbsolutePath();
			//仍然是定义文件字符输出流.
			FileWriter fw=null;
			BufferedWriter bw=null;
			try {
				fw=new FileWriter(str);
				bw=new BufferedWriter(fw);
				bw.write(jta.getText());
				
			} catch (Exception e2) {
				e2.printStackTrace();
				// TODO: handle exception
			}finally{
				try {
					bw.close();
					fw.close();
				} catch (IOException e1) {
					// TODO 自动生成的 catch 块
					e1.printStackTrace();
				}
				
			}
		}
		
	}
}

一共没多少行代码。这个要注意的一点是

if(jfc.getSelectedFile() == null){
				return;
			}

这段代码一定要写,如果不写的话,那你点击了文件,然后点打开弹出JFileChooser的open界面,如果接下来没有选择任何文件而是点关闭,会爆出一个空指针异常。所以这个代码不能漏。第一片博客就这样。第一次写好紧张呢。哈哈。