Java语言程序设计基础篇_编程练习题**17.21 (十六进制编辑器)

目录

题目:**17.21 (十六进制编辑器)

代码示例

结果展示


题目:**17.21 (十六进制编辑器)

  编写一个 GUI 应用程序,让用户在文本域输入一个文件名,然后按回车键,在文本域显示它的十六进制表达形式。用户也可以修改十六进制代码,然后将它回存到这个文件中,如图17-23b所示。

  • 代码示例

编程练习题17_21HexEditor.java

package chapter_17;

import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ContentDisplay;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class 编程练习题17_21HexEditor extends Application{
	private TextField tfInput;
	private TextArea textArea;
	private String FilePath;
	@Override
	public void start(Stage primaryStage) throws Exception {
		VBox vBox = getPane();
		
		tfInput.setOnKeyPressed(e ->{
			if(e.getCode() == KeyCode.ENTER) {
				try{
					readFile();
				}catch (IOException ex) {
					ex.printStackTrace();
				}
			}
		});
		
		Scene scene = new Scene(vBox);
		primaryStage.setTitle("编程练习题17_21HexEditor");
		primaryStage.setScene(scene);
		primaryStage.show();
	}
	public VBox getPane() {
		VBox vBox = new VBox();
		
		tfInput = new TextField();
		tfInput.setPrefWidth(300);
		Label lbInput = new Label("Enter a file:",tfInput);
		lbInput.setContentDisplay(ContentDisplay.RIGHT);
		
		textArea = new TextArea();
		Button btSave = new Button("Save the change");
		btSave.setOnAction(e ->{
			try {
				saveFile();
			}catch (IOException ex) {
				ex.printStackTrace();
			}
		});
		
		vBox.setAlignment(Pos.CENTER);
		vBox.getChildren().addAll(lbInput,tfInput,textArea,btSave);
		return vBox;
	}
	public void readFile() throws IOException{
		FilePath = tfInput.getText().replaceAll("\\\\", "/");
		if(!FilePath.isEmpty()) {
			try(
				FileInputStream input = new FileInputStream(FilePath);
				){
				int read;
				while((read = input.read()) != -1) {
					 if (read == '\n') { // 仅检查 \n  
						 textArea.appendText("\n");
					 }else
						 textArea.appendText(getHex(read)+" ");
				}
				
			}
		}
	}
	public void saveFile() throws IOException {  
	    if (!FilePath.isEmpty()) {  
	        try (BufferedWriter writer = new BufferedWriter(new FileWriter(FilePath))) {  
	            String text = textArea.getText();  
	            String[] s = text.split(" ");
	            for(String str:s) {
	            	if(str.contains("\n")) {
	            		writer.write("\n");
	            	}
	            	int i = hexStringToDecimal(str);
	            	writer.write((char)i);
	            }
	        }  
	    }  
	}
	public static int hexStringToDecimal(String hex) {  
		return Integer.parseInt(hex,16);
	}
	public static String getHex(int value) {
		return Integer.toHexString(value);
	}
	public static void main(String[] args) {
		Application.launch(args);
	}
}
  • 结果展示

C:\Users\Lenovo\eclipse-workspace\JavaFX\src\Text\Exercise17_21.txt

修改前/修改后

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/872765.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分类预测|基于蜣螂优化极限梯度提升决策树的数据分类预测Matlab程序DBO-Xgboost 多特征输入单输出 含基础模型

分类预测|基于蜣螂优化极限梯度提升决策树的数据分类预测Matlab程序DBO-Xgboost 多特征输入单输出 含基础模型 文章目录 一、基本原理1. 数据准备2. XGBoost模型建立3. DBO优化XGBoost参数4. 模型训练5. 模型评估6. 结果分析与应用原理总结 二、实验结果三、核心代码四、代码获…

1-9 图像膨胀 opencv树莓派4B 入门系列笔记

目录 一、提前准备 二、代码详解 kernel np.ones((3, 3), np.uint8) _, binary_image cv2.threshold(image, 127, 255, cv2.THRESH_BINARY) dilated_image cv2.dilate(binary_image, kernel, iterations1) 三、运行现象 四、完整代码 五、完整工程贴出 一、提前准备 …

scrapy 爬取微博(一)【最新超详细解析】:创建微博爬取工程

本项目属于个人学习记录,爬取的数据会于12小时内销毁,且不可用于商用。 1 初始化环境 首先我们需要有python环境,先安装一下python,然后配置环境变量,这边给出windows的配置: 我这边的安装目录是D:\pyt…

PHP轻量级高性能HTTP服务框架 - webman

摘要 webman 是一款基于 workerman 开发的高性能 HTTP 服务框架。webman 用于替代传统的 php-fpm 架构,提供超高性能可扩展的 HTTP 服务。你可以用 webman 开发网站,也可以开发 HTTP 接口或者微服务。 除此之外,webman 还支持自定义进程&am…

Django发送邮件

【图书介绍】《Django 5企业级Web应用开发实战(视频教学版)》_django 5企业级web应用开发实战(视频教学版)-CSDN博客 Django 5框架Web应用开发_夏天又到了的博客-CSDN博客 本文学习怎么使用Django发送邮件。 尽管使用Python的smtplib模块发送电子邮件…

vant 动态查询下拉菜单(可用)

动态查询item项 <van-form submit"onSubmit" ref"formRef"><Title title"企业信息" title-line title-size"19" class"ml-[18px] mb-[18px]"></Title><van-cell-group inset class"py-[18px]&quo…

【JavaSE基础】Java 基础知识

Java 转义字符 Java 常用的转义字符 在控制台&#xff0c;输入 tab 键&#xff0c;可以实现命令补全 转义字符含义作用\t制表符一个制表位&#xff0c;实现对齐的功能\n &#xff1a;换行符\n换行符一个换行符\r回车符一个回车键 System.out.println(“韩顺平教育\r 北京”);&…

pod基础和镜像拉取策略

目录 pod概念 pod的分类 1.基础容器 pause 2.初始化容器 init 实验&#xff1a;定义初始化容器 init容器的作用 实验&#xff1a;如何在容器内部进行挂载 镜像拉取策略 pod概念 pod是k8s里面的最小单位&#xff0c;pod也是最小化运行容器的资源对象。容器是基于pod在k…

黑马点评10——用户签到-BitMap数据结构

文章目录 BitMap用法签到功能签到统计 BitMap用法 其实数据库完全可以实现签到功能 但签到数据比较大&#xff0c;借鉴签到卡的思想 布隆过滤器也是使用BitMap实现的. 签到功能 因为是当前用户的当天&#xff0c;所以保存需要的年月日不需要参数&#xff0c;可以直接获取。…

matter中的Fabric(网络结构)

什么是Fabric&#xff1f; Fabric可以被理解为一组相互信任的设备和控制器&#xff0c;它们共享一个共同的信任域。这意味着在同一个Fabric中的设备和控制器之间可以进行安全的通信&#xff0c;而无需额外的身份验证或安全检查。每个Fabric有一个唯一的标识&#xff0c;确保Fab…

Android调整第三方库PickerView宽高--回忆录

一、效果 // 时间选择implementation com.contrarywind:Android-PickerView:4.1.9 多年前&#xff0c;使用到事件选择器&#xff0c;但是PickerView默认宽度使满屏的&#xff0c;不太符合业务需求&#xff0c;当时为此花了许多时间&#xff0c;最终找到了解决方案&#xff0c;…

使用 Milvus 和 Streamlit 搭建多模态产品推荐系统

我们可以使用 Milvus 搭建多模态 RAG 应用&#xff0c;用于产品推荐系统。用户只需简单上传一张图片并输入文字描述&#xff0c;Google 的 MagicLens 多模态 Embedding 模型就会将图像和文本编码成一个多模态向量。然后&#xff0c;使用这个向量从 Milvus 向量数据库中找到最相…

JVM——Java虚拟机内存初识(面经篇之JVM内存)

网上说的太详细了,真不利于我的初识和记忆&#xff0c; 例如&#xff1a;堆区的young&#xff0c; old&#xff0c;讲了一大堆&#xff0c;结果&#xff0c;我连这些区域是干什么的都不知道&#xff0c;存储什么的都不知道&#xff0c; 害得是我自己总结&#xff1a; 堆&#x…

JavaWeb【day08】--(MySQL-Mybatis入门)

数据库开发-MySQL 1. 多表查询 1.1 概述 1.1.1 数据准备 SQL脚本&#xff1a; #建议&#xff1a;创建新的数据库 create database db04; use db04; ​ -- 部门表 create table tb_dept (id int unsigned primary key auto_increment comment 主键ID,name v…

各类AI工具编程能力测试对比

各类AI工具编程能力对比 现在各类AI工具火爆&#xff0c;擅长各类问题解决&#xff0c;闲来无事&#xff0c;验证下各类AI工具的编程能力如何。问题&#xff1a;c 实现杨辉三角&#xff0c;并main函数测试 kimi 对话窗口输入问题&#xff0c;得到了c的完整程序&#xff1a; …

通过redis-operator 来部署 Redis Cluster 集群

安装 Redis Operator 首先&#xff0c;需要安装 redis-operator。可以通过 Helm 或直接应用 YAML 文件来安装。 使用 Helm 安装&#xff1a; helm repo add ot-helm https://ot-container-kit.github.io/helm-charts/ helm install redis-operator ot-helm/redis-operator --…

B树和B+树

B树和B树是两种用于数据库和文件系统中的自平衡树数据结构&#xff0c;它们可以保持数据有序&#xff0c;同时支持快速的查找、插入和删除操作。下面是它们的基本介绍&#xff1a; B树&#xff08;B-Tree&#xff09; 定义&#xff1a;B树是一种平衡的多路搜索树&#xff0c;…

数据分析新星,DuckDB与Pandas处理大数据速度对比

大家好&#xff0c;Pandas库众所周知&#xff0c;适合数据分析新手入门&#xff0c;但在大数据面前却显得处理缓慢。相比之下&#xff0c;开源的DuckDB以其卓越的列式存储性能&#xff0c;在大数据处理上速度惊人&#xff0c;速度远超Pandas。而且&#xff0c;DuckDB配备了Pyth…

JS设计模式之“语言之魂” - 原型模式

前言 当我们学习JavaScript的时候&#xff0c;经常会听到原型&#xff08;prototype)、原型链&#xff08;prototype chain&#xff09;和原型模式&#xff08;prototype pattern&#xff09;这些概念&#xff0c;它们之间有什么关联呢&#xff1f;怎么样才能使用好原型模式呢…

基于yolov8的西红柿检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的西红柿检测系统是一种利用深度学习技术的创新应用&#xff0c;旨在通过自动化和智能化手段提高西红柿成熟度检测的准确性和效率。该系统采用YOLOv8算法&#xff0c;该算法是深度学习领域中的先进目标检测模型&#xff0c;具备实时检测和多目标识别的…