Java——Swing组件加IO流实现读写

  在Java中IO流是很重要的,文件读写,有两种流,字节流和字符流,我们学了IO流可以实现记事本简易模仿,

鄙人就写了一个来巩固自己的文件操作,编程要学好要多练,关说不练假本事。

 里面的注释加了很多其他的内容,可以温故一些知识

   老丑 小白一个,有错误请指出,代码如下:

package com.yzl;
import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.awt.event.*;
/**
 * @author 老丑
 * @version V1.0
 */
public class notebook extends JFrame implements ActionListener{

//定义所需的组件
//定义文本域
JTextArea jta;
//定义菜单条
JMenuBar jmb;
//定义菜单
JMenu jm1;
JMenuItem jmt1,jmt2;
JScrollPane jsp;
public static void main(String[] args) {
// TODO Auto-generated method stub
notebook nb=new notebook();
}
public notebook(){
super("记事本");
//初始化文本域
jta=new JTextArea();
//初始化菜单条
jmb=new JMenuBar();
//初始化菜单
jm1=new JMenu("FILE");
//初始化我也不知道叫什么,菜单项
jmt1=new JMenuItem("打开");
//给打开这个按钮注册监听
jmt1.addActionListener(this);
//设置命令
jmt1.setActionCommand("open");
jmt2=new JMenuItem("保存");
//给保存这个按钮注册监听
jmt2.addActionListener(this);
//设置命令
jmt2.setActionCommand("save");
//布局,JFrame默认border布局,JPanel默认Float布局,除此之外还有网格布局(GridLayout),卡片布局
jsp=new JScrollPane(jta);
this.setJMenuBar(jmb);
jmb.add(jm1);
jm1.add(jmt1);
jm1.add(jmt2);
this.add(jsp,BorderLayout.CENTER);
//this.add(jmb,BorderLayout.NORTH);
//设置大小
this.setSize(400,300);
//设置关闭时,程序自动关闭,其中EXIT_ON_CLOSE相当于3
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置可视化,有一次用到com.sum.awt.AWTUilities.setOpacity()来设置透明度
this.setVisible(true);
}
//ActionEvent e 是监听源
@Override
public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub
if(e.getSource()==jmt1)//也可以用上述的setActionCommand
{
//文件选择
JFileChooser jfc=new JFileChooser();
FileReader fr=null;
BufferedReader br=null;
//设置标题
jfc.setDialogTitle("请选择文件");
//使用默认方式
jfc.showOpenDialog(null);
jfc.setVisible(true);
//需要得到用户选择的路径(绝对路径)
String filename=jfc.getSelectedFile().getAbsolutePath();
try {
fr = new FileReader(filename);
br=new BufferedReader(fr);
//从文件读取信息
String s="";
String allcon="";
while((s=br.readLine())!=null)
{
allcon=allcon+s+"\r\n";//把换行也传入信息
}
jta.setText(allcon);
} catch (Exception e1) {//此处书写不规范
// TODO Auto-generated catch block
e1.printStackTrace();
}finally{
try {
//判断打开的流是否为空,如果不为空则关闭

       //文件流关闭遵循: 先开后关
if(br!=null)
{
br.close();
}
if(fr!=null)
{
fr.close();
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
if(e.getSource()==jmt2)
{
//文件选择
JFileChooser jfc=new JFileChooser();
//标题设置
jfc.setDialogTitle("请选择文件");
jfc.showSaveDialog(null);
//设置可视化
jfc.setVisible(true);
//得到文件的路径
String filename=jfc.getSelectedFile().getAbsolutePath();
//字符流,放在这里,提升了作用域
FileWriter fw=null;
BufferedWriter bw=null;
try {
fw=new FileWriter(filename);
bw=new BufferedWriter(fw);
bw.write(this.jta.getText());
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}finally
{
try {
//判断打开的流是否为空,如果不为空则关闭
if(bw!=null)
{
bw.close();
}
if(fw!=null)
{
bw.close();
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值