JavaIO简单的demo

Java IO简单的demo

最近在复习Java IO 的部分,感觉又学到了一些东西。Java 的 IO 流,我觉得也是很有趣的东西。所以就写了一个简单的程序来测试。
因为一直都是使用控制台进行操作,所以感觉 IO 很麻烦,但是因为学过了一点关于 Java GUI 的知识,所以使用 GUI 加上 IO 流感觉会比较直观一点。

功能介绍:
整体功能比较简单,就是在左边将文本写入文件,然后在右边读取出来,只是很简单的 Java IO 使用。

下面是运行截图:
在这里插入图片描述
下面是代码:
GUI 部分代码
面板类 JPanel

package top.crazydragon.view;

import java.awt.Font;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import top.crazydragon.dao.FileUtil;

public class Panel extends JPanel {

	private static final long serialVersionUID = 1297254398324057867L;
	private Box boxH, boxV1, boxV2, boxH1, boxH2;
	private JButton readButton, writeButton;
	private JTextArea readArea, writeArea;
	private JScrollPane readScroll, writeScroll;
	
	public Panel() {
		init();
	}
	
	private void init() {
		boxH = Box.createHorizontalBox();
		boxV1 = Box.createVerticalBox();
		boxV2 = Box.createVerticalBox();
		boxH1 = Box.createHorizontalBox();
		boxH2 = Box.createHorizontalBox();
		
		readButton = new JButton("读取");
		writeButton = new JButton("写入");
		readArea = new JTextArea(10,15);
		writeArea = new JTextArea(10,15);
		Font font = new Font("微软雅黑",Font.BOLD,20);
		readArea.setFont(font);
		writeArea.setFont(font);
		
		readScroll = new JScrollPane(readArea);
		writeScroll = new JScrollPane(writeArea);
		
		boxH1.add(writeButton);
		boxH2.add(readButton);
		boxV1.add(boxH1);
		boxV1.add(Box.createVerticalStrut(25));
		boxV1.add(writeScroll);
		boxV2.add(boxH2);
		boxV2.add(Box.createVerticalStrut(25));
		boxV2.add(readScroll);
		boxH.add(boxV1);
		boxH.add(Box.createHorizontalStrut(25));
		boxH.add(boxV2);
		this.add(boxH);
		
		//监视器
		//如果需要改动,只要修改这部分代码就可以了。
		//使用了一点简单的 Lambda 知识。
		readButton.addActionListener((e)->{
			FileUtil.ReadFile(readArea);
		});
		
		writeButton.addActionListener((e)->{
			System.out.println(writeArea.getText());
			FileUtil.writeFile(writeArea.getText().trim());
		});
	}

}

窗口类 Window

package top.crazydragon.view;
import java.awt.FlowLayout;
import javax.swing.JFrame;

public class Window extends JFrame{
	
	private static final long serialVersionUID = -9095970807213793806L;
	private Panel panel;
	
	public Window(String title) {
		super(title);
		this.panel = new Panel();
		init();
	}
	
	private void init() {
		this.add(panel);
		this.setLayout(new FlowLayout());
		this.setVisible(true);
		this.setBounds(300, 300, 680, 400);
		this.setResizable(false);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

核心类:Java IO 测试的类

package top.crazydragon.dao;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import javax.swing.JTextArea;

public class FileUtil {
    //生成文本文件的路径在和工程文件在同级目录
	private static String path = "../poem.txt";
	private FileUtil() {}
	
	public static void ReadFile(JTextArea area) {
		try (                                                                                  
			BufferedReader reader = new BufferedReader(
			new InputStreamReader(
			new FileInputStream(path),"UTF-8"))){
			
			String line = null;
			while ((line = reader.readLine()) != null) {
				area.append(line+"\n");
			}
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e1) {
			e1.printStackTrace();
		}
	}
	
	public static void writeFile(String text) {
		try (
			BufferedWriter writer = new BufferedWriter(
			new OutputStreamWriter(
			new FileOutputStream(path, true), "UTF-8"))){
			
			writer.write(text+"\r\n");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

测试类

package top.crazydragon.view;

public class Test {
	public static void main(String[] args) {
		new Window("测试");
	}
}

运行效果
写入
在这里插入图片描述
读取
在这里插入图片描述

说明

我这里是借助于一个 poem.txt 文本,它是和工程目录同级的文件,并且我是以追加的形式写的,每次写入的内容,都会被写入 poem.txt 文件,并且读取会将它们全部显示出来。

读者可能注意到上面两张图片和下面的有点不一样,这是我微调了一下样式,GUI 界面也麻烦的,但是使用起来感觉还是很好的。这个例子中涉及了一下几个流:
BufferedReader 缓冲字符输入流
InputStreamReader 转换流
FileInputStream 文件输入流
BufferedWriter 缓冲字符输出流
OutputStreamWriter 转换流
FileOutputStream 文件输出流

如果需要自己尝试,可以保留我的 GUI 部分,在添加监视器部分,重写自己的逻辑,这样可以节省时间。

发布了21 篇原创文章 · 获赞 32 · 访问量 1621

猜你喜欢

转载自blog.csdn.net/qq_40734247/article/details/102958344