JAVA 大讲堂----Input和Output,输入输出流

Java基础--手把手教你如何从键盘录入信息 从键盘录入信息 文章目录一、前奏1、创建扫描仪对象2、导入包二、从键盘录入信息1、输入整数2、输入浮点数3、输入字符串三、释放资源四、补充说明1、输入与接收的数据类型不匹配2、输入带有空格的字符串五、全部代码 一、前奏 1、创建扫描仪对象 Scanner有扫描仪的意思,sc是自己取的名字(有的人喜欢用input),new Scanner是创建一个Scanner对象,System.in代表电脑的键盘。 /*创建扫描仪对象*/ Scanner sc=new Scanner(Sys 阅读详情

一. Input和Output

1. stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在Java的IO中,所有的stream(包括Input和Out stream)都包括两种类型:

1.1 以字节为导向的stream

以字节为导向的stream,表示以字节为单位从stream中读取或往stream中写入信息。以字节为导向的stream包括下面几种类型:

1) input stream:

1) ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用

2) StringBufferInputStream:把一个String对象作为InputStream

3) FileInputStream:把一个文件作为InputStream,实现对文件的读取操作

4) PipedInputStream:实现了pipe的概念,主要在线程中使用

5) SequenceInputStream:把多个InputStream合并为一个InputStream

2) Out stream

1) ByteArrayOutputStream:把信息存入内存中的一个缓冲区中

2) FileOutputStream:把信息存入文件中

3) PipedOutputStream:实现了pipe的概念,主要在线程中使用

4) SequenceOutputStream:把多个OutStream合并为一个OutStream

1.2 以Unicode字符为导向的stream

以Unicode字符为导向的stream,表示以Unicode字符为单位从stream中读取或往stream中写入信息。以Unicode字符为导向的stream包括下面几种类型:

1) Input Stream

1) CharArrayReader:与ByteArrayInputStream对应

2) StringReader:与StringBufferInputStream对应

3) FileReader:与FileInputStream对应

4) PipedReader:与PipedInputStream对应

2) Out Stream

1) CharArrayWrite:与ByteArrayOutputStream对应

2) StringWrite:无与之对应的以字节为导向的stream

3) FileWrite:与FileOutputStream对应

4) PipedWrite:与PipedOutputStream对应

以字符为导向的stream基本上对有与之相对应的以字节为导向的stream。两个对应类实现的功能相同,字是在操作时的导向不同。如CharArrayReader:和ByteArrayInputStream的作用都是把内存中的一个缓冲区作为InputStream使用,所不同的是前者每次从内存中读取一个字节的信息,而后者每次从内存中读取一个字符。

1.3 两种不现导向的stream之间的转换

InputStreamReader和OutputStreamReader:把一个以字节为导向的stream转换成一个以字符为导向的stream。

2. stream添加属性

2.1 "为stream添加属性”的作用

运用上面介绍的Java中操作IO的API,我们就可完成我们想完成的任何操作了。但通过FilterInputStream和FilterOutStream的子类,我们可以为stream添加属性。下面以一个例子来说明这种功能的作用。

如果我们要往一个文件中写入数据,我们可以这样操作:

FileOutStream fs = new FileOutStream("test.txt");

然后就可以通过产生的fs对象调用write()函数来往test.txt文件中写入数据了。但是,如果我们想实现“先把要写入文件的数据先缓存到内存中,再把缓存中的数据写入文件中”的功能时,上面的API就没有一个能满足我们的需求了。但是通过FilterInputStream和FilterOutStream的子类,为FileOutStream添加我们所需要的功能。

2.2 FilterInputStream的各种类型

2.2.1 用于封装以字节为导向的InputStream

1) DataInputStream:从stream中读取基本类型(int、char等)数据。

2) BufferedInputStream:使用缓冲区

3) LineNumberInputStream:会记录input stream内的行数,然后可以调用getLineNumber()和setLineNumber(int)

4) PushbackInputStream:很少用到,一般用于编译器开发

2.2.2 用于封装以字符为导向的InputStream

1) 没有与DataInputStream对应的类。除非在要使用readLine()时改用BufferedReader,否则使用DataInputStream

2) BufferedReader:与BufferedInputStream对应

3) LineNumberReader:与LineNumberInputStream对应

4) PushBackReader:与PushbackInputStream对应

2.3 FilterOutStream的各种类型

2.2.3 用于封装以字节为导向的OutputStream

1) DataIOutStream:往stream中输出基本类型(int、char等)数据。

2) BufferedOutStream:使用缓冲区

3) PrintStream:产生格式化输出

2.2.4 用于封装以字符为导向的OutputStream

1) BufferedWrite:与对应

2) PrintWrite:与对应

3. RandomAccessFile

1) 可通过RandomAccessFile对象完成对文件的读写操作

2) 在产生一个对象时,可指明要打开的文件的性质:r,只读;w,只写;rw可读写

3) 可以直接跳到文件中指定的位置

4. I/O应用的一个例子

import java.io.*;

public class TestIO{

public static void main(String[] args)

throws IOException{

//1.以行为单位从一个文件读取数据

BufferedReader in =

new BufferedReader(

new FileReader("F://nepalon//TestIO.java"));

String s, s2 = new String();

while((s = in.readLine()) != null)

s2 += s + "/n";

in.close();

 

//1b. 接收键盘的输入

BufferedReader stdin =

new BufferedReader(

new InputStreamReader(System.in));

System.out.println("Enter a line:");

System.out.println(stdin.readLine());

 

//2. 从一个String对象中读取数据

StringReader in2 = new StringReader(s2);

int c;

while((c = in2.read()) != -1)

System.out.println((char)c);

in2.close();

 

//3. 从内存取出格式化输入

try{

DataInputStream in3 =

new DataInputStream(

new ByteArrayInputStream(s2.getBytes()));

while(true)

System.out.println((char)in3.readByte());

}

catch(EOFException e){

System.out.println("End of stream");

}

 

//4. 输出到文件

try{

BufferedReader in4 =

new BufferedReader(

new StringReader(s2));

PrintWriter out1 =

new PrintWriter(

new BufferedWriter(

new FileWriter("F://nepalon// TestIO.out")));

int lineCount = 1;

while((s = in4.readLine()) != null)

out1.println(lineCount++ + ":" + s);

out1.close();

in4.close();

}

catch(EOFException ex){

System.out.println("End of stream");

}

 

//5. 数据的存储和恢复

try{

DataOutputStream out2 =

new DataOutputStream(

new BufferedOutputStream(

new FileOutputStream("F://nepalon// Data.txt")));

out2.writeDouble(3.1415926);

out2.writeChars("/nThas was pi:writeChars/n");

out2.writeBytes("Thas was pi:writeByte/n");

out2.close();

DataInputStream in5 =

new DataInputStream(

new BufferedInputStream(

new FileInputStream("F://nepalon// Data.txt")));

BufferedReader in5br =

new BufferedReader(

new InputStreamReader(in5));

System.out.println(in5.readDouble());

System.out.println(in5br.readLine());

System.out.println(in5br.readLine());

}

catch(EOFException e){

System.out.println("End of stream");

}

 

//6. 通过RandomAccessFile操作文件

RandomAccessFile rf =

new RandomAccessFile("F://nepalon// rtest.dat", "rw");

for(int i=0; i<10; i++)

rf.writeDouble(i*1.414);

rf.close();

 

rf = new RandomAccessFile("F://nepalon// rtest.dat", "r");

for(int i=0; i<10; i++)

System.out.println("Value " + i + ":" + rf.readDouble());

rf.close();

 

rf = new RandomAccessFile("F://nepalon// rtest.dat", "rw");

rf.seek(5*8);

rf.writeDouble(47.0001);

rf.close();

 

rf = new RandomAccessFile("F://nepalon// rtest.dat", "r");

for(int i=0; i<10; i++)

System.out.println("Value " + i + ":" + rf.readDouble());

rf.close();

}

}

关于代码的解释(以区为单位):

1区中,当读取文件时,先把文件内容读到缓存中,当调用in.readLine()时,再从缓存中以字符的方式读取数据(以下简称“缓存字节读取方式”)。

1b区中,由于想以缓存字节读取方式从标准IO(键盘)中读取数据,所以要先把标准IO(System.in)转换成字符导向的stream,再进行BufferedReader封装。

2区中,要以字符的形式从一个String对象中读取数据,所以要产生一个StringReader类型的stream。

4区中,对String对象s2读取数据时,先把对象中的数据存入缓存中,再从缓冲中进行读取;对TestIO.out文件进行操作时,先把格式化后的信息输出到缓存中,再把缓存中的信息输出到文件中。

5区中,对Data.txt文件进行输出时,是先把基本类型的数据输出屋缓存中,再把缓存中的数据输出到文件中;对文件进行读取操作时,先把文件中的数据读取到缓存中,再从缓存中以基本类型的形式进行读取。注意in5.readDouble()这一行。因为写入第一个writeDouble(),所以为了正确显示。也要以基本类型的形式进行读取。

6区是通过RandomAccessFile类对文件进行操作。

golang 线上事故 golang 线上事故 最近公司要做大促的一些活动。并且单量,qps持续上涨。之前使用的是django python 语言做的一个服务端。目前已经部署的国家里面最多的国家会有300+个实例。大促期间还可能会增加一个实例数。这么多的实例部署,回滚的时间都会特变长,除了问题也不好定位。并且如此多的一个机器,连接数* 实例数也会导致DB等其他服务扛不住这么大的并发。所以决定上go服务解决性能问题。 ... 阅读详情

相关推荐

2025年ZBrush雕刻实战:从基础到高级技巧全解析

本文全面解析2025年ZBrush雕刻实战技巧,从基础界面操作到高级笔刷应用。详细介绍了核心功能区域如工具面板和灯箱,以及推荐材质选择。重点讲解6个实用笔刷技巧,包括Standard、Move和ClayBuildup等,帮助用户从入门到精通掌握ZBrush雕刻技术。

weixin_29300241的博客 362

java学习input_1

学习input

zlyllx的博客 2812

LIO-SAM编译ubuntu20.04 Noetic

一、下载二、编译&&解决报错报错如下。

Kenneth666888的博客 689

Java中对输入输出的常用操作

介绍java常用的输入输出方式

m0_51977744的博客 1733

从原理图到GDSII:Virtuoso+Pcell实战避坑指南(以TSMC65nm振荡器为例)

本文以TSMC65nm工艺下的振荡器设计为例,详细解析了Virtuoso环境中Pcell的最佳实践方案,涵盖变量管理、版图设计、Calibre验证等关键环节。通过实战案例和避坑指南,帮助工程师高效完成从原理图到GDSII的转化,特别针对LVS验证和参数化单元设计提供了实用解决方案。

fff88的博客 900

篮球比赛24秒计时器改造指南:用Multisim实现可调式倒计时系统

本文详细介绍了如何使用Multisim软件改造篮球比赛24秒计时器,实现可调式倒计时系统。从脉冲信号发生器到声光报警模块,提供了完整的电路设计方案和调试技巧,帮助开发者快速掌握数字电路设计的核心原理,提升体育电子设备开发效率。

wood5的博客 212

JAVA Input与Output

chuanqi day02

xiugouspring的博客 892

用 dism 合并与删除 wim 映像

一、合并 假设 installA.wim 有 3 个映像,installB.wim 有 1 个映像。 1、全部合并 将 installA.wim 中的 3 个卷映像合并到 installB.wim 中,这样 installB.wim 中的卷映像增加到 4 个。 dism/export-image/sourceimagefile:d:\installA.wim/sourceindex:1/destinationimagefile:d:\installB.wim dism/export-image/source

KefanWon的博客 5201

java input怎么用_Java里Input的十种形式

2014/3/3Java里Input的十种形式input标签是表单世界中的"老大"。有10种形式,概括如下:/>是标准的文本框。它可以有一个值属性value,用来设置文本框里的默认文本。像文本框一样,但是会以星号代替用户所输入的实际字符。/>是复选框,用户可以快速的选择或者不选一个条目。它可以有一个预选属性checked,像这样的格式type="checkbox" checked="c...

weixin_35399360的博客 9948

IP-Guard安全网关实例

企业相关情况: 1.OA系统,主要为日常工作使用,该系统IP为192.168.1.2,端口为8080; 2.文件共享服务器,用于存放日常工作资料和文档,该文件共享服务器的IP为192.168.1.1,其中\\192.168.1.1\private 目录中的存放着公司重要文档,不能随意外传; 3.安全网关已采用串联的方式联入网络,IP为192.168.2.6,所有机器访问OA系统和文件共享服务...

IP-Guard专栏 707

【图论】系列(七)图论的中心性度量方法及重要性评价指标

图论中的中心性度量方法是用来衡量图中各个节点(或顶点)相对重要性的指标。

qq_30066733的博客 1077

javaIO流,input,output 文件输入与输出

目标: input,output,在java中主要操作数据的输入输出,数据的流动,可以通过学习输入输出的方法把一段数据从内存里放到硬盘上永久的存起来,也可以从硬盘上读取一个文件加载到内存。 1.能够通过File类对文件熟练操作(熟练) 2.理解相对路径和绝对路径的区别(了解) 3.掌握常见的字节输入输出和字符输入输出(熟练) 4.了解序列化和反序列化(熟悉) File类(文件类): 是java中的文件/文件夹的抽象表示形式,一个File类的对象,在java中就表示一个文件或文件夹。...

weixin_51426897的博客 4685

Unity之ASE+ShaderGraph+VFX入门到精通 目录

这里是ASE+ShaderGraph+VFX从入门到精通专栏的目录,不停更新中,有问题随时留言或者私信。

TxNet 2841

java input函数怎么用_java输入函数

展开全部InputStreamReader areais = new InputStreamReader(System.in);BufferedReader areabr = new BufferedReader(areais);arean = Integer.valueOf(areabr.readLine());用的流读写,上边是读数字62616964757a686964616fe4b893e5...

weixin_28909503的博客 3394

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

java input函数怎么用_Java函数习惯用法详解

在Java编程中,有些知识 并不能仅通过语言规范或者标准API文档就能学到的。在本文中,我会尽量收集一些最常用的习惯用法,特别是很难猜到的用法。我把本文的所有代码都放在公共场所里。你可以根据自己的喜好去复制和修改任意的代码片段,不需要任何的凭证。实现equals()class Person {String name;int birthYear;byte[] raw;public boolean e...

weixin_42523260的博客 2107

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Input的多种用法

1、 定义和用法 标签用于搜集用户信息。 根据不同的 type 属性值,输入字段拥有很多种形式,和不同的表达方法(来自w3c) 比如: ,文本框 ,密码框 ,提交按扭 ,复选框,单选框 ,隐藏域 ,按扭 ,浏览...

weixin_44556271的博客 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Java学习教程,从入门到精通,Java 输入和输出(10)

在Java中,输入和输出(I/O)操作通常涉及与数据源(如键盘、文件、网络等)和目标(如控制台、文件、打印机等)之间的数据传输。Java标准库提供了丰富的类和方法来处理这些操作。

qq_45746668的博客 911

JAVA里的input

我是一个计算机萌新,之前学了一点Python,后入坑Java,然后我试着用input函数,结果发现用不了,下面就看看在Java中怎么实现input函数的功能吧。 import java.util.Scanner;//形象理解:在Java.util中把scanner拿过来用。 public class practice02{ public static void main(String[] args){ Scanner input =new Scanner(System.in); System.

normal_luo的博客 4958

详细领略Java的输入流和输出流

狼北前言 说到java的输入流和输出流,流是分为两种的(字节流和字符流),那么我们就要先了解什么是java的字节流和字符流,然后我才来了解怎么操作这些流来写入文件中和写出文件。所以我这篇文章分为两大部分,第一部分是“Java的流”,第二部分是“操作io流”。废话不多说让猿猴带你一起来领略这里面的一二。 Java的IO流 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列。和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个

m0_55943900的博客 3119

Java 入门指南:初识 Java IO

Java IO(Input/Output)是 Java 编程语言中用于处理输入和输出的标准库,它提供了一组类和接口,用于在程序和外部世界(如文件、网络连接、内存等)之间进行数据传输。Java IO库被设计为两个主要层次:字节流和字符流,每种流都适用于不同的数据处理场景。

热带鱼的技术博客 1136

java中的输入操作

Java中输入一般是通过Scanner类来实现的: 具体步骤如下: (1)创建Scanner对象,接受从控制台输入 Scanner input=new Scanner(System.in); (2) 接受String类型 String str=input.next(); (3)接受int类型 int n=input.nextInt(); (4)输出结果 System.out.println(str); System.out.println(n); 输入一个数:

m0_67392126的博客 3360

java input函数怎么用_io流函数略解(java_input流)[二]

背景在写这篇随笔之前,已经写了io流函数略解(java_File)(一),主要是总结了File的一些操作,以及一些源码介绍。在Io实际应用中,实际上运用在如果会操作File,实际上很难写出一点能实际应用的code,因为操作文件嘛,更多的是操作流,也就是steam。下面将简单总结一些流的概念,以及流的一些基本理论,同时也会贴出源码来略看。实践io之所以叫io,i的意思是input,o的意思是outp...

weixin_39692847的博客 300

彻底明白Java的IO系统-2

一.Input和Output1.         stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在Java的IO中,所有的stream(包括Input和Out stream)都包括两种类型:1.1          以字节为导向的stream以字节为导向的stream,表示以字节为单位从stream中读取或往stream中写入信息。以字节为导向的str

Nepalon的专栏 1760

JAVA中IO操作总汇

一. Input和Output 1. stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在 Java的IO中,所有的stream(包括Input和Out stream)都包括两种类型: 1.1 以字节为导向的stream 以字节为导向的stream,表示以字节为单位从stream中读取或往stream中写入信息。以字 节为导向的stream包括下面几种类型: 1) i...

xiedayun的专栏 541

Java IO的原理 入门理解,input和output和java程序的关系

Java IO的原理 入门理解,input和output和java程序的关系1.Java IO的原理2.input和output的理解3.IO流的分类4.IO流体系(蓝色为重点、常用)5.各种流的用法 1.Java IO的原理 IO流用来处理设备之间的数据传输 Java程序中,对于数据的输入或者输出操作都是以“流(stream)”的方式来进行的 java.io包下提供了各种“流”类和接口,用以获...

码农回顾 7050

Java怎么记忆和理解IO流中的Output和Input

IO流是什么 能帮我们做什么? &amp;gt;为了在程序结束后某些数据得以保存,IO可以帮我们将数据存储到持久化设备中(硬盘,U盘) &amp;gt;程序运行时的数据时在内存中,使用IO流可以帮我们把内存数据存储到持久化设备中, &amp;gt;&amp;gt;内存数据存储到持久化设备--输出(Output)操作:我给你东西,对我来说东西是出去了(写) &amp;gt;&amp;gt;持久化设备读取到内存中--输入(Input...

I want to fly higher 944
上一篇: 文件名字过长被自动截取改变
下一篇: Draw2D 绘图-- 自定义图型
wangwhcore
博客等级 码龄19年 7粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值