置为true即可。
流对象创建完成以后,就可以使用OutputStream中提供的wirte方法向流中依次写入数
据了。最基本的写入方法只支持byte数组格式的数据,所以如果需要将内容写入文件,则需要把对应的内容首先转换为byte数组。
这里以如下格式写入数据:首先写入字符串s,使用String类的getBytes方法将该字符
串转换为byte数组,然后写入字符串“/r/n”,转换方式同上,该字符串的作用是实现文本文件的换行显示,最后写入int数据n,首先将n转换为字符串,再转换为byte数组。这种写入数据的顺序以及转换为byte数组的方式就是流的数据格式,也就是该文件的格式。因为这里写的都是文本文件,所以写入的内容以明文的形式显示出来,也可以根据自己需要存储的数据设定特定的文件格式。
其实,所有的数据文件,包括图片文件、声音文件等等,都是以一定的数据格式存储数
据的,在保存该文件时,将需要保存的数据按照该文件的数据格式依次写入即可,而在打开该文件时,将读取到的数据按照该文件的格式解析成对应的逻辑即可。
最后,在数据写入到流内部以后,如果需要立即将写入流内部的数据强制输出到外部的
数据源,则可以使用流对象的flush方法实现。如果不需要强制输出,则只需要在写入结束以后,关闭流对象即可。在关闭流对象时,系统首先将流中未输出到数据源中的数据强制输出,然后再释放该流对象占用的内存空间。
使用FileWriter写入文件时,步骤和创建流对象的操作都和该示例代码一致,只是在转
换数据时,需要将写入的数据转换为char数组,对于字符串来说,可以使用String中的toCharArray方法实现转换,然后按照文件格式写入数据即可。
对于其它类型的字节输出流/字符输出流来说,只是在逻辑上连接不同的数据源,在创
建对象的代码上会存在一定的不同,但是一旦流对象创建完成以后,基本的写入方法都是write方法,也需要首先将需要写入的数据按照一定的格式转换为对应的byte数组/char数组,然后依次写入即可。
所以IO类的这种设计形式,只需要熟悉该体系中的某一个类的使用以后,就可以触类
旁通的学会其它相同类型的类的使用,从而简化程序员的学习,使得使用时保持统一。
读取控制台输入
前面介绍了使用IO类实现文件读写的示例,其实在很多地方还需要使用到控制台(Console)指无图形界面的程序,运行时显示或输入数据的位置,前面IO类,这里再以读取控制台输入为例子来介绍IO类的使用。
的介绍中可以使用System.out.println将需要输出的内容显示到控制台,本部分将介绍如何接受用户在控制台中的输入。
使用控制台输入是用户在程序运行时和程序进行交互的一种基础手段,这种
手段是Windows操作系统出现以前,操作系统位于DOS时代时,用户和程序交互的主要手段。当然,现在这种交互的方式已经被图形界面(GUI)程序取代了。
在读取控制台操作中,操作系统在用户在控制台输入内容,并按回车键提交以后,将用户提交的内容传递给Java运行时系统,Java运行时系统将用户输入的信息构造成一个输入流对象——System.in,在程序员读取控制台输入时,只需要从该流中读取数据即可。至于构造流System.in的过程对于程序员来说是透明的。
查阅JDK API可以发现,System类中的静态属性in是InputStream类型的对下面的示例代码实现了输入“回显”的功能,即将用户输入的内容重新显示
/**
* 读取控制台输入,并将输入的内容显示到控制台 */
public class ReadConsole1 { }
在该示例代码中,从System.in中读取出用户的输入,然后将用户输入的内下面实现一个简单的逻辑,功能为:回显用户在控制台输入的内容,当用户容转换为字符串s,然后输出该字符串的内容即可。 输入quit时程序运行结束。实现的代码如下:
象,可以按照输入流的读取方法读取即可。 到控制台,示例代码如下:
public static void main(String[] args) { }
try{
//提示信息
System.out.println(\请输入:\ //数组缓冲
byte[] b = new byte[1024]; //读取数据
int n = System.in.read(b); //转换为字符串
String s = new String(b,0,n); //回显内容
System.out.println(\输入内容为:\
}catch(Exception e){}
/**
* 读取控制台输入
* 循环回显内容,当输入quit时退出程序 */
public class ReadConsole2 { }
public static void main(String[] args) { }
//数组缓冲
byte[] b = new byte[1024]; //有效数据个数 int n = 0; try{
while(true){ }
//提示信息
System.out.println(\请输入:\ //读取数据
n = System.in.read(b); //转换为字符串
String s = new String(b,0,n - 2); //判断是否是quit
if(s.equalsIgnoreCase(\ }
//回显内容
System.out.println(\输入内容为:\
break; //结束循环
}catch(Exception e){}
在该示例代码中,加入了一个while循环,使得用户的输入可以进行多次,
在用户输入时,送入输入流的内容除了用户输入的内容以外,还包含”/r/n”这两个字符,所以在将输入的内容和quit比较时,去掉读出的最后2个字符,将剩余的内容转换为字符串。
最后是一个简单的《掷骰子》的控制台小游戏,在该游戏中,玩家初始拥有1000的金钱,每次输入押大还是押小,以及下注金额,随机3个骰子的点数,如果3个骰子的总点数小于等于9,则开小,否则开大,然后判断玩家是否押对,
如果未押对则扣除下注金额,如果押对则奖励和玩家下注金额相同的金钱。该程序的示例代码如下:
/**
* 掷骰子游戏实现 */
public class DiceGame {
public static void main(String[] args) {
int money = 1000; //初始金钱数量 int diceNum = 0; // 掷出的骰子数值和 int type = 0; // 玩家押的大小 int cMoney = 0; // 当前下注金额 boolean success; // 胜负 // 游戏过程 while (true) {
// 输入大小
System.out.println(\请押大小(1代表大,2代表小):\ type = readKeyboard(); // 校验
if (!checkType(type)) { }
// 输入下注金额 while(true){ }
System.out.println(\你当前的金钱数量是\
+ money + \请下注:\
cMoney = readKeyboard(); // 校验
if (!checkCMoney(money,cMoney)) { }
System.out.println(\输入非法,请重新输入!\ continue; break;
System.out.println(\输入非法,请重新输入!\ continue;
}else{
相关推荐: