java记事本简单_使用Java制作一个简单的记事本

本文介绍如何利用Java的Swing和IO库创建一个简单的记事本应用程序,具备打开、编辑和保存文本文件的功能。通过RandomAccessFile、FileChannel和FileLock处理文件读写,并使用Charset进行编码解码。
摘要由CSDN通过智能技术生成

通过使用Java的Swing、IO来实现一个简单记事本,实现打开指定的text文本文件,然后将text文件的内容加载到Swing组件中,然后在Swing组件中编辑记事本内容,然后同菜单的保存选项将编辑后的内容保存到text文件中。代码如下:

import java.io.*;

import java.nio.*;

import java.nio.channels.*;

import java.nio.charset.*;

import java.awt.*;

import java.awt.event.*;

import javax.swing.JOptionPane;

/**

*功能:简单记事本

*2011-12-25

*/

public class SimpleNotepad implements ActionListener{

private Frame frame;

private FileDialog fd_load;

private FileDialog fd_save;

private TextArea ta;

private String file = "";

private MenuItem save;

private RandomAccessFile raf;

private FileChannel fci;

private FileLock flock;

private CharsetEncoder encoder;

private CharsetDecoder decoder;

public static void main( String args[]) {

new SimpleNotepad().init();

}

public void init(){

frame = new Frame("My Notepad");

MenuBar mb = new MenuBar();

Menu file = new Menu("文件");

Menu help = new Menu("帮助");

MenuItem open = new MenuItem("打开");

save = new MenuItem("保存");

save.setEnabled(false);

file.add(open);

file.add(save);

mb.add(file);

mb.add(help);

frame.setMenuBar(mb);

ta = new TextArea();

frame.add(ta,"Center");

open.addActionListener(this);

save.addActionListener(this);

frame.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){

System.exit(0);

}

});

frame.setSize(600,400);

frame.setLocation(300,100);

frame.setVisible( true);

fd_load = new FileDialog(frame,"打开文件",FileDialog.LOAD);

fd_save = new FileDialog(frame,"保存文件",FileDialog.SAVE);

Charset charset = Charset.forName(System.getProperty("file.encoding"));

encoder = charset.newEncoder();

decoder = charset.newDecoder();

}

public void actionPerformed(ActionEvent e){

String s = e.getActionCommand();

if(s.equals("打开")){

fd_load.setVisible(true);

String d = fd_load.getDirectory();

String f = fd_load.getFile();

if((d != null) && (f != null)){

String destfile = d + f;

if(destfile.equals(file)){

return;

}else{

this.closeFile();

file = destfile;

this.loadFile();

}

}

}else if(s.equals("保存")){

this.saveFile();

}

}

public void loadFile(){

try{

raf = new RandomAccessFile(file,"rw");

fci = raf.getChannel();

flock = fci.tryLock();

if(flock == null){

ta.setText("");

JOptionPane.showMessageDialog(null,

"文件正在使用中,无法以独占的方式打开!",

"错误提示", JOptionPane.ERROR_MESSAGE);

file = "";

raf.close();

raf = null;

}else{

int length = (int)fci.size();

ByteBuffer bb = ByteBuffer.allocate(length);

fci.read(bb);

bb.flip();

CharBuffer cb = decoder.decode(bb);

ta.setText(cb.toString());

frame.setTitle("My Notepad - " + file);

save.setEnabled(true);

}

}catch(IOException e){

e.printStackTrace();

}

}

public void saveFile(){

String content = ta.getText();

try{

CharBuffer cb = CharBuffer.wrap(content.toCharArray());

ByteBuffer bb = encoder.encode(cb);

raf.setLength(0);

fci.write(bb);

fci.force(true);

}catch(IOException e){

e.printStackTrace();

}

}

public void closeFile(){

try{

if(flock != null){

flock.release();

}

if(raf != null){

raf.close();

}

file = "";

frame.setTitle("My Notepad");

save.setEnabled(false);

}catch(IOException e){

e.printStackTrace();

}

}

}

效果图:

9d757243d6be5f20072426ecdbf9a7e7.png

以上就是本文的全部内容了,希望大家能够喜欢。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值