Java程序中如何输入数据

引言

在Java编程中,输入数据是一个常见的需求,无论是从控制台输入、从文件读取、从网络接收还是从用户界面获取数据。本文将详细介绍几种常见的数据输入方法,包括控制台输入、文件读取、网络接收和图形用户界面输入,旨在为开发者提供实用的参考。

1. 控制台输入
1.1 使用 Scanner 类

Scanner 类是Java标准库中提供的一个方便的类,用于从标准输入流(通常是键盘输入)读取数据。Scanner 类可以轻松读取各种类型的数据。

import java.util.Scanner;public class ConsoleInputExample {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入一个整数: ");int number = scanner.nextInt();System.out.println("你输入的整数是: " + number);System.out.print("请输入一个字符串: ");String text = scanner.nextLine();System.out.println("你输入的字符串是: " + text);scanner.close();}
}
1.2 使用 BufferedReader 类

BufferedReader 类结合 InputStreamReader 可以更高效地读取字符输入。BufferedReader 类提供了按行读取的功能,适合处理大量输入。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;public class ConsoleInputExample2 {public static void main(String[] args) {BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));System.out.print("请输入一个字符串: ");try {String text = reader.readLine();System.out.println("你输入的字符串是: " + text);} catch (IOException e) {e.printStackTrace();}}
}
2. 文件读取
2.1 使用 FileReader 类

FileReader 类可以直接读取文件中的字符数据。FileReader 类是字符输入流,适合读取文本文件。

import java.io.FileReader;
import java.io.IOException;public class FileInputExample {public static void main(String[] args) {try (FileReader reader = new FileReader("input.txt")) {int ch;while ((ch = reader.read()) != -1) {System.out.print((char) ch);}} catch (IOException e) {e.printStackTrace();}}
}
2.2 使用 BufferedReader 类

BufferedReader 类结合 FileReader 可以更高效地读取文件中的字符数据。BufferedReader 类提供了按行读取的功能,适合处理大量数据。

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;public class FileInputExample2 {public static void main(String[] args) {try (BufferedReader reader = new BufferedReader(new FileReader("input.txt"))) {String line;while ((line = reader.readLine()) != null) {System.out.println(line);}} catch (IOException e) {e.printStackTrace();}}
}
3. 网络接收
3.1 服务器端代码

服务器端可以从客户端接收数据。使用 SocketInputStreamReader 类可以实现网络字符输入。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;public class NetworkInputServer {public static void main(String[] args) {try (ServerSocket serverSocket = new ServerSocket(12345)) {System.out.println("服务器启动,等待客户端连接...");Socket socket = serverSocket.accept();System.out.println("客户端已连接");try (BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {String message;while ((message = reader.readLine()) != null) {System.out.println("收到的消息: " + message);}}} catch (IOException e) {e.printStackTrace();}}
}
3.2 客户端代码

客户端可以向服务器发送数据。使用 SocketOutputStreamWriter 类可以实现网络字符输出。

import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;public class NetworkInputClient {public static void main(String[] args) {try (Socket socket = new Socket("localhost", 12345)) {try (PrintWriter writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true)) {writer.println("Hello, Server!");}} catch (Exception e) {e.printStackTrace();}}
}
4. 图形用户界面输入
4.1 使用 JFrame 和 JTextField

在Swing中,可以使用 JFrameJTextField 组件来创建图形用户界面,从用户输入框中获取数据。

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class GUIInputExample extends JFrame {private JTextField textField;private JLabel label;public GUIInputExample() {setTitle("输入示例");setSize(300, 200);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLocationRelativeTo(null);textField = new JTextField(20);label = new JLabel("请输入一些文字: ");JButton button = new JButton("提交");button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String input = textField.getText();JOptionPane.showMessageDialog(GUIInputExample.this, "你输入的文字是: " + input);}});JPanel panel = new JPanel();panel.add(label);panel.add(textField);panel.add(button);add(panel);}public static void main(String[] args) {SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {new GUIInputExample().setVisible(true);}});}
}
5. 注意事项
  • 异常处理:在读取数据时,务必处理可能的 IOException 异常,确保程序的健壮性。
  • 资源管理:使用 try-with-resources 语句自动关闭资源,避免资源泄漏。
  • 编码:在读取文件或网络数据时,注意字符编码的设置,确保正确读取和解析字符数据。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【vue2.0入门】vue单文件组件

目录 引言一、配置编辑器vue2代码片段模版1. 配置vue2代码模版2. 使用vue模版 二、模版介绍1. template区域2. script 区域2.1 name2.2 components2.3 props2.4 data2.5 computed2.6 watch2.7 methods2.8 生命周期函数 3. style 区域 三、总结 引言 本系列教程旨在帮助一些零基…

外星人入侵

学习于Python编程从入门到实践(Eric Matthes 著) 整体目录:外星人入侵文件夹是打包后的不必在意 图片和音效都是网上下载的 音效下载网站:Free 游戏爆击中 Sound Effects Download - Pixabay 运行效果:可以上下左右移…

【Qt】Macbook M1下载安装

文章目录 一、下载Xcode命令行工具二、在Cion中配置编译器三、安装Qt四、配置qmake环境五、创建Qt项目 博主已经下载了Clion,所以本文是将qt配置到Clion上 本博客所写的教程有一定的问题,因为我在官网下载后发现有一些所需的包是没有的,不知道…

Vim9 语法高亮syntax 在指定的缓冲区和窗口执行命令

背景:从开发,创建makefile、编译、单元测试、到生产部署都只有俺一个人,所以所有的工作都要自己完成,因此有了想法做一个插件,按需实现:构建Makefile,编译、打包、压缩、上传服务器、解压、安装…

docker之容器设置开机自启(4)

命令语法: docker update --restartalways 容器ID/容器名 选项: --restart参数 no 默认策略,在容器退出时不重启容器 on-failure 在容器非正常退出时(退出状态非0),才会重启容器 …

动态规划 —— 子数组系列-最大子数组和

1. 最大子数组和 题目链接: 53. 最大子数组和 - 力扣(LeetCode)https://leetcode.cn/problems/maximum-subarray/description/ 2. 算法原理 状态表示:以某一个位置为结尾或者以某一个位置为起点 dp[i]表示:以i位置为结…

【教程】华南理工大学国际校区宿舍门锁声音设置

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 视频教程:【教程】华南理工大学国际校区宿舍门锁声音设置_哔哩哔哩_bilibili 来自: https://tieba.baidu.com/p/8297840035

【AI技术对电商的影响】

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

uni-app中使用 unicloud 云开发平台③

文章目录 六、hbuilderX 中使用 unicloud 云开发平台文档传统业务开发流程什么是 unicloudunicloud 优点开发流程uncloud 构成云数据库云存储及 CDN创建云函数工程七、unicloud api 操作云函数调用云函数实现云数据库基本增删改查1. 获取数据库引用云存储操作六、hbuilderX 中使…

智享AI 无人自动直播的崛起 ,引领智能互动与自动带货新潮流!

在当今数字化飞速发展的时代,商业领域正经历着一场前所未有的变革。智能互动与自动带货成为了新的潮流,而其中最引人瞩目的便是最新的 AI 无人自动直播玩法,它宛如一股强劲的东风,引领着行业的风向。 AI 无人自动直播是多种先进技…

科技云报到:数字化转型,从不确定性到确定性的关键路径

科技云报到原创。 数字化转型是VUCA时代最大的确定性。 如果说,过去是数字化转型的试验阶段,实施的是开荒动土、选种育苗,那么当前要进行的是精耕细作、植树造林,数字化转型已进入了由个别行业、个别场景的“点状应用”向各行各业…

vue3+vite 前端打包不缓存配置

最近遇到前端部署后浏览器得清缓存才能出现最新页面效果得问题 所以…按以下方式配置完打包就没啥问题了,原理很简单就是加个时间戳 /* eslint-disable no-undef */ import {defineConfig, loadEnv} from vite import path from path import createVitePlugins from…

基于Qt/C++全局键盘和鼠标事件监控工具

项目介绍: 该项目实现了一个基于 Qt 框架的全局键盘和鼠标事件监控工具,主要功能包括: 实时监控全局键盘事件:捕获并显示所有键盘按键,并将按键的虚拟键码转为键名显示。实时监控全局鼠标事件:捕获并显示…

华为数通HCIA系列第5次考试-【2024-46周-周一】

文章目录 1、子网掩码有什么作用,和IP地址是什么关系,利用子网掩码可以获取哪些信息?2、已知一个IP地址是192.168.1.1,子网掩码是255.255.255.0,求其网络地址3、已知某主机的IP地址是192.168.100.200,子网掩…

arkUI:遍历数据数组动态渲染(forEach)

arkUI:遍历数据数组动态渲染(forEach) 1 主要内容说明2 相关内容2.1 ForEach 的基本语法2.2 简单遍历数组2.2 多维数组遍历2.4 使用唯一键2.5 源码1的相关说明2.5.1 源码1 (遍历数据数组动态渲染)2.5.2 源码1运行效果 …

Ue5 umg学习(一)

学习视频资料链接 2、UI编辑界面_哔哩哔哩_bilibili 打开ue5虚幻引擎 创建新的文件夹UI,在这个文件夹里写东西 点击停靠在布局中 双击点进UI文件夹 右键用户界面,选择控件蓝图 创建控件蓝图,重命名,在名称后面加一个_BP1代表是…

PYNQ 框架 - 中断(INTR)驱动

目录 1. 简介 2. 分析 2.1 Block Design 2.2 AXI Timer 2.2.1 IP 基本信息 2.2.2 IP 地址空间 2.2.3 级联模式 2.2.4 生成/捕获模式 2.3 AXI Interrupt 2.3.1 IP 基本信息 2.3.2 IP 地址空间 2.3.3 相关概念 2.3.4 参数配置 2.3.5 中断确认寄存器 3. PYNQ 代码 …

RAG综述:《A Comprehensive Survey of Retrieval-Augmented Generation (RAG)》

来源于《A Comprehensive Survey of Retrieval-Augmented Generation (RAG): Evolution, Current Landscape and Future Directions》 一、RAG所解决的问题 如何有效地从外部知识源检索相关信息,如何将这些信息无缝地融入到生成文本中,以及如何在保证生…

GitLab 如何跨版本升级?

本分分享 GitLab 跨版本升级的一些注意事项。 众所周知,GitLab 的升级必须要严格遵循升级路径,否则就会出现问题,导致升级失败。因此,在 GitLab 升级之前需要做好两件事情: 当前版本的确认升级路径的确认 极狐GitLa…

aws(学习笔记第十二课) 使用AWS的RDS-MySQL

aws(学习笔记第十二课) 使用AWS的RDS 学习内容: AWS的RDS-MySQL 1. 使用AWS的RDS 什么是RDS RDS就是Relation Database Service的缩写,是AWS提供的托管关系型数据库系统。让用户能够在 AWS Cloud 云中更轻松地设置、操作和扩展关系数据库。 数据库和we…