前言:我们老师之前留了一个期末作业,涉及到手动编写一个文本编辑器,于是乎,我在原有代码的基础上,自己加入了一些功能
设计原理:因为计算机中的所有文件以二进制(0和1)的形式存储,表示方式冗长,常常是一长串,所以,将其转换为结构较为紧凑的16进制,更有利于用户的查看和编辑
部分实现过程:
代码讲解:
1.定义了HexText类,用于继承JFrame,生成一个窗口(弹窗)
2.定义JTextArea对象,用于多文本的输入和显示
3.定义JScrollPane对象,该对象作用为滚动条
4.定义一个JSpinner对象,用于调节显示的字体大小
5.JButton,在java的swing库的作用为创建一个按钮,可以使用户与图形界面进行交互,当然,这里的作用是改变字体颜色
6.JComboBox为一个下拉框组件,在这里的作用是选择显示的字体
7.定义label对象的作用为显示转换后的16进制字符,不过label的awt库据说已经过时了,所以这算是一个败笔
核心方法实现逻辑
部分代码讲解:
1.在这里我定义了catchFile方法,用于打开文件
2.创建文件选择器,JFileChooser是swing库中的一个类,用于弹出对话框,让用户选择想要打开的文件
3.设置文件选择器的对话框标题
4.加入if语句,判断用户是否确定打开该文件,如果该文件允许打开,则构建16进制内容和普通文本内容(StringBuilder)
5. try (InputStream in = new FileInputStream(file);
BufferedReaderreader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8))) {
String line;这行代码的目的为尝试读取文件内容,try常常被用于处理异常,这里使用的目的为读取完内容后退出读取的进程,显示转换的内容
6.byte[] buffer = new byte[1024]:创建一个字节缓冲区,这里尝试做了一些优化,减少I/O操作次数
7. String hex = Integer.toHexString(buffer[i] & 0xFF).toUpperCase():将字节转换为十六进制字符串,并确保长度为2,如果单个字符则前面补0
总结:
这个工具还有很多需要优化的点,例如两次读取文件,可以改为读取一次,字节缓冲区优化效果不太好,不过,新手第一次写这个工具,希望大佬们多多指点
发表评论
您还未登录,请先登录。
登录