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 部分,在添加监视器部分,重写自己的逻辑,这样可以节省时间。