教你用Java GUI实现文本文件的读写

一、实验题目

二、分析

实验要求为:

  • 实现一个界面,界面中包含一个文本显示区和两个按钮(存档和读档)
  • 读档按钮作用是打开文件并读取内容,将内容显示在文本区中
  • 存档按钮作用是将文本区的内容写入到文件中。

简单分析一下,可以看出这样的要求奥,包含的要考察知识点主要有两个方向:

  • GUI绘制界面并添加事件
  • 使用IO流对象对文件进行读写

好的小伙伴们,废话不多说,下面就来的实现它。

三、实现

首先,让我们创建一个GUI界面,先秉持着一切从简的设计思想,预计它长这样:

这样的布局方式,我们可以选择采用流布局实现,在容器中直接放入文本显示区和两个按钮,适当调整窗口大小即可实现:

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class GUIDemo extends JFrame{

	//三个组件
	private JButton saveButton;
	private JButton loadButton;
	private TextArea textArea;

	//容器
	private Container container;

	public GUIDemo() {
		//设置title
		super("File Demo");

		//设置流布局
		setLayout(new FlowLayout());

		//获取容器
		container = getContentPane();

		//三个组件
		textArea = new TextArea();
		saveButton = new JButton("save");
		loadButton = new JButton("load");

		//保存文件按钮点击事件
		saveButton.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {

				System.out.println("存档成功");
			}
		});

		//读入文件按钮点击事件
		loadButton.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {

				System.out.println("读档成功");
			}
		});

		//装填三个组件
		container.add(textArea);
		container.add(loadButton);
		container.add(saveButton);

		//调整大小
		setSize(500, 300);
		//显示
		setVisible(true);
	}

	public static void main(String[] args) {
		GUIDemo demo = new GUIDemo();
		demo.setDefaultCloseOperation(EXIT_ON_CLOSE);
	}
}

代码的含义都在注释里面,就不啰嗦讲解了。

跑起来是这个样子:

点击两下按钮测试点击事件,控制台输出:

好的,GUI界面设计完毕,下面来为两个按钮编写点击事件。

首先要解决的一个问题是“目标文件”。由于题目中没有提到目标文件是否需要从文件系统中选取产生,那么我们不妨暂时将目标文件地址直接在代码中,令private static final String TARGET_FILE= "./temp.txt";

那么在初始化页面时就应该先创建这个文件路径对应的file对象:

//目标文件
	private File targetFile;
...
//创建目标文件对象
	targetFile = new File(TARGET_FILE);
	if(targetFile.createNewFile()) {
		System.out.println("文件不存在,创建成功");
	}else {
		System.out.println("文件存在");
	}

这里需要注意几个问题:

1.创建目标文件需要使用createNewFile()方法,而非mkdir()方法。否则会创建成为文件夹而非文件

2.createNewFile()方法会抛出一个IOException,为了便于处理,这里直接选择将异常从构造方法和主方法中抛出;


处理好目标文件问题,两次启动程序,可以看到控制台输出:


哦吼,文件处理成功。

接着,就是在为两个按钮添加点击事件。在下面的处理中,对于IO流的选择,我们统一选择字符流.

首先是读档按钮,它的点击事件逻辑大致为:

1.创建目标文件的输入字符流

2.从输入流中读取文件中的内容并形成结果

3.关闭输入流

4.将读入的结果显示在文本显示区中

实现成为代码:

//读入文件按钮点击事件
loadButton.addActionListener(new ActionListener() {

	@Override
	public void actionPerformed(ActionEvent e) {

		try {
			//字符读入流
			FileReader reader = new FileReader(targetFile);

			//读入缓冲区
			char[] buffer = new char[1024];

			//读入结果
			StringBuffer result = new StringBuffer();

			//每次读入缓冲区的长度
			int len;

			//从读入流中读取文件内容并形成结果
			while((len = reader.read(buffer)) != -1) {
				result.append(buffer,0,len);
			}

			//关闭读入流
			reader.close();

			//更新文本显示区内容
			textArea.setText(result.toString());

			System.out.println("读档成功");
		} catch (FileNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

	}
});

在目标文件中写下Hello World!!,运行程序,点击load:

nice~~

好的,接下来就剩下最后一项任务了,完成存档!

存档按钮的点击事件应该为:

1.打开目标文件字符输出流

2.获取当前文本显示区的内容

3.将文本显示区的内容通过输出流写入文件

4.关闭输出流

5.清空文本显示区

哦吼,最后一条是我加上去的,其实不清空也可以。

代码实现如下:

//保存文件按钮点击事件
saveButton.addActionListener(new ActionListener() {

	@Override
	public void actionPerformed(ActionEvent e) {

		try {
			//打开文件字符输出流
			FileWriter writer = new FileWriter(targetFile);

			//获取文本显示区文本
			String result = textArea.getText();

			//写入文件
			writer.write(result);

			//关闭输出流
			writer.close();

			//清空文本显示区内容
			textArea.setText("");

			System.out.println("存档成功");
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}
});

在文本显示区中输入Hello Java!!,点击save:

啥?你说文本框里面啥也没有?对,因为最后把内容清空了!

四、全部代码

好了,实现了上面的全部功能,最后把代码汇总在这里:

(谨慎抄袭哦)

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;

public class GUIDemo extends JFrame{

	private static final String TARGET_FILE = "./temp.txt";

	//三个组件
	private JButton saveButton;
	private JButton loadButton;
	private TextArea textArea;

	//容器
	private Container container;

	//目标文件
	private File targetFile;

	public GUIDemo() throws IOException {
		//设置title
		super("File Demo");

		//设置流布局
		setLayout(new FlowLayout());

		//获取容器
		container = getContentPane();

		//创建目标文件对象
		targetFile = new File(TARGET_FILE);
		if(targetFile.createNewFile()) {
			System.out.println("文件不存在,创建成功");
		}else {
			System.out.println("文件存在");
		}

		//三个组件
		textArea = new TextArea();
		saveButton = new JButton("save");
		loadButton = new JButton("load");

		//保存文件按钮点击事件
		saveButton.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {

				try {
					//打开文件字符输出流
					FileWriter writer = new FileWriter(targetFile);

					//获取文本显示区文本
					String result = textArea.getText();

					//写入文件
					writer.write(result);

					//关闭输出流
					writer.close();

					//清空文本显示区内容
					textArea.setText("");

					System.out.println("存档成功");
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
		});

		//读入文件按钮点击事件
		loadButton.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {

				try {
					//字符读入流
					FileReader reader = new FileReader(targetFile);

					//读入缓冲区
					char[] buffer = new char[1024];

					//读入结果
					StringBuffer result = new StringBuffer();

					//每次读入缓冲区的长度
					int len;

					//从读入流中读取文件内容并形成结果
					while((len = reader.read(buffer)) != -1) {
						result.append(buffer,0,len);
					}

					//关闭读入流
					reader.close();

					//更新文本显示区内容
					textArea.setText(result.toString());

					System.out.println("读档成功");
				} catch (FileNotFoundException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}

			}
		});

		//装填三个组件
		container.add(textArea);
		container.add(loadButton);
		container.add(saveButton);

		//调整大小
		setSize(500, 300);
		//显示
		setVisible(true);
	}

	public static void main(String[] args) throws IOException {
		GUIDemo demo = new GUIDemo();
		demo.setDefaultCloseOperation(EXIT_ON_CLOSE);
	}
}
(0)

相关推荐

  • java GUI实现ATM机系统(3.0版)

    写个小项目了解一下GUI.用java GUI实现银行ATM自动取款机,实现登录界面.登录成功界面.各个操作功能实现界面. 用java GUI实现一个ATM机系统(3.0版) 设计思路 设计两个包(bank包,atmJFrame包) 1.bank包: (1).ATM类:实现用户各种操作; (2).Data类:从user文件中获取所有用户信息,并返回要找的用户,再将修改完之后的用户信息写入user文件中: (3).user文件储存所有用户信息. 2.atmJFrame包: (1).MyJFrame类

  • 用GUI实现java版贪吃蛇小游戏

    本文实例为大家分享了java版贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 项目结构 新建一个JFrame窗口,作为程序入口 public class GameStart{ public static void main(String[] args) { JFrame jFrame = new JFrame(); jFrame.setBounds(100,100,900,720); jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON

  • Java图形界面GUI布局方式(小结)

    流式布局 采用流式布局会将元素按从左到右的顺序排列,如果一个元素在一行中放不下,那这个元素会另起一行依然按照从左到右的顺序排列 示例: 代码 public class Test { public static void main(String[] args) { // 创建窗口 JFrame jFrame = new JFrame(); // 设置窗口名称 jFrame.setTitle("hello"); // 创建流式布局管理器 对齐方式为左对齐 LayoutManager lay

  • java GUI编程之布局控制器(Layout)实例分析

    本文实例讲述了java GUI编程之布局控制器(Layout).分享给大家供大家参考,具体如下: 布局控制器,是用来系统自动分配各个component在window内部是怎么排布的:默认为FlowLayout,即挨个排序.FlowLayout是Panel的 instance 1:FlowLayout import java.awt.*; public class TestLayout { public static void main(String[] args) { Frame f = new

  • Java实现的具有GUI的校园导航系统的完整代码

    0.写在前面 2020-5-18更新 这个东西已经是两年前的了,现在问我具体细节我也不是很清楚了,而且现在review两年前的代码感觉写的好烂...请大家有问题下面留言,不要加我的企鹅了,正在准备考研,比较忙. 一点建议: 1.当时会的比较少,对象实例化对于单纯的数据查询来说效率极低而且很蠢,我现在更建议使用数据库,或者简单点用xmlorjson都可以,建议想写的好一点的同学把里面的数据读写逻辑改一改,用数据库不香吗 2.这个是分客户端服务端的,服务端相当于用底层手撸了一个相当简单的tomcat

  • java Gui实现肯德基点餐收银系统

    大家应该都去麦当劳或肯德基吃过快餐,参考肯德基官网的信息模拟肯德基快餐店的收银系统,简单的java Gui模拟的肯德基收银系统. 1.系统介绍 同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++/python/Java,结合设计模式(2种以上)至少实现系统的以下功能: 1.正常餐品结算和找零. 2.基本套餐结算和找零. 3.使用优惠劵购买餐品结算和找零. 4.可在一定时间段参与店内活动(自行设计或参考官网信息). 5.模拟打印小票的功能

  • 五种JAVA GUI布局管理的方式

    1. 流式布局(FlowLayout) 定义: 通俗地说,流式布局就是根据窗口大小,自动改变窗口内组件的位置.例如:原窗口大小一行可以容纳10个BUTTON,但将窗口缩小后,每行仅能容纳5个BUTTON,此时原先的10个BUTTON中的五个就会自动排列到下一行. 示例:(省略panel的使用) Hashset package 布局管理; ​ import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.

  • JAVA图形界面(GUI)之表格的示例代码

    表格(JTable)是我们在GUI开发中很常用的一个组件.表格在可视化编程中用于显示信息,在Swing编程中非常有用,当要显示大量数据时,用表格可以清晰的显示出来. 本篇博客将演示JTable的基本用法. 构造方法: 方法名 说明 JTable() 构造一个默认的 JTable,使用默认的数据模型.默认的列模型和默认的选择模型对其进行初始化 JTable(int numRows, int numColumns) 使用 DefaultTableModel 构造具有 numRows 行和 numCo

  • JAVA基础-GUI

    Java也提供图像化编程 图形化 GUI(图形用户界面) GUI 1  Graphical User Interface(图形用户接口) 2  用图形的方式,来显示计算机操作的界面,这样更方便更直观 CLI 1  Command line User Interface (命令行用户接口) 2  就是常见的Dos命令行操作 3  需要记忆一些常用的命令,操作不直观 Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中 Awt和Swing java.Awt:Abstrac

  • java GUI编程之paint绘制操作示例

    本文实例讲述了java GUI编程之paint绘制操作.分享给大家供大家参考,具体如下: import java.awt.*; public class Testpint { public static void main(String[] args) { // new TFPaint().lunchPaint(); new TFPaint(); } } class TFPaint extends Frame{ /* public void lunchPaint() { this.setBoun

  • java GUI编程之监听操作实例分析

    本文实例讲述了java GUI编程之监听操作.分享给大家供大家参考,具体如下: 当点击Frame中的component组件时,会产生相应的效果,但是相应的其必须进行监听,确定是那个对象,那种操作,但是如果用cup进行主动的监听就会消耗大量的资源,所以有了被动的监听,即对应的事件发生后会自动的执行相关的代码. Button监听: instance 1: import java.awt.*; import java.awt.event.*; public class MoniterStart { p

  • IntelliJ IDEA安装插件阿里巴巴Java开发手册(Alibaba Java Coding Guidelines)

    以前看到过个:Java开发手册(阿里巴巴-公开版),这是个pdf文档,里面描述了一些Java开发的规约,里面确实有很多好用的规约,要是在学校就有机会看看的话,那么,在毕业之后,实际工作中就会少很多坑.现在,阿里巴巴又一次对这个文档进行了升级,直接变成了一个插件.你需要的就是:知道有这么个插件,然后,还得安装这个插件,那么以后,你在写代码的时候,这个插件就会自动的纠正你在写代码的时候的一些很low的不规范代码. 下面看怎么在这个 IntelliJ IDEA 上安装这个插件. 通过Jetbrains

  • java GUI实现五子棋游戏

    本文实例为大家分享了java实现五子棋游戏GUI,供大家参考,具体内容如下 引用包 //{Cynthia Zhang} import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.LineBorder; import javax.swing.JOptionPane; import javax.swing.ImageIcon; import java.awt.Image; i

  • java GUI界面初步入门示例【AWT包】

    本文实例讲述了java GUI界面.分享给大家供大家参考,具体如下: Java不太擅长做图形界面: AWT是一种较老的包,最新的是Swing包,由于其包内调用了一部分的操作系统的内容,所以无法做到完全的跨平台. 对于每一个图形元素都是一个component类,其包含container,container是一个component,同时他又作为component的一个容器类,又可以存放component.在container中还有window和panel两种类,其中window类是独立的,可以直接显

  • Java的带GUI界面猜数字游戏的实现示例

    先导包 import java.util.*; import javax.swing.*; 再写主方法 public static void main(String[] args) { } 新声明一个Scanner和随机数 public static void main(String[] args) { Scanner in = new Scanner(System.in); Random r = new Random(); } 让UIManager爬取系统窗口样式 try { UIManage

  • java GUI实现加法计算器

    本文实例为大家分享了java GUI实现加法计算器的具体代码,供大家参考,具体内容如下 1.写出一个简易计算器需要的组件 2.先出监听事件类 public class TextCalculator01 { public static void main(String[] args) { new MyCalculator(); } } //计算器类 class MyCalculator extends Frame{ public MyCalculator() { //三个文本框 TextField

  • JavaGUI实现随机单词答题游戏

    本文实例为大家分享了JavaGUI实现随机单词答题游戏的具体代码,供大家参考,具体内容如下 案例描述:java-gui实现单词游戏,随机显示单词,键盘在文本框中输入想对应的单词,回答正确加5分,错误扣三分** 案例图片 回答正确 回答错误 重置答题 案例分析 1.定义三个面板存放各个组件JPanel 2.定义拆分窗格布局 3.创造三个文本域用来显示和输入 4.定义滚动窗格设置自动换行 5.定义"确定"重置""退出"按钮 6.给三个按钮添加事件处理 7.定义

  • Java使用GUI绘制线条的示例

    在Java的GUI编程中,如何使用GUI绘制线条? 以下示例演示了如何使用Graphics2D类的Line2D对象的draw()方法作为参数来绘制一条线. package com.yiibai; import java.awt.*; import java.awt.event.*; import java.awt.geom.Line2D; import javax.swing.JApplet; import javax.swing.JFrame; public class DrawAndDisp

随机推荐