------- android培训、java培训、期待与您交流! ----------
黑马学习日志之十四 IO流(三)
1 读取键盘录入
System.out:对应的是标准的输出设备,控制台
System.in:对应的是标准的输入设备,键盘
例子:
import java.io.*;
class ReadIn
{
public static void main(String [] args)throws IOException{
InputStream in = System.in;
int by = in.read();
int by1 = in.read();
int by2 = in.read();
System.out.println(by);
System.out.println(by1);
System.out.println(by2);//输入a回车符 打印结果 97 13 10
//因为\r是13 \n是10
InputStream in2=System.in;
int by11=in2.read();
int by12 =in2.read();
int by13 =in2.read();
System.out.println(by11);//输入abc 打印结果97 只有一个
System.out.println(by12);
System.out.println(by13);//输入abc 打印结果 97 98 99
}
}
例子:
通过键盘录入数据,当录入一行数据后,就将该行数据进行打印,如果录入的数据是over,那么停止录入。
import java.io.*;
class ReadIn
{
public static void main(String[]args) throws IOException{
InputStream in=System.in;
StringBuilder sb =new StringBuilder();
while(true)
{
int ch =in.read();
if(ch=='\r')
continue;
if(ch=='\n'){
Strings=sb.toString();
if("over".equals(s))
break;
System.out.println(s.toUpperCase());
sb.delete(0,sb.length());
}
else{
sb.append((char)ch);
}
}
in.close();
}
}
2 转换流
InputStreamReader 字节流通向字符流 是Reader的子类
例子:
import java.io.*;
class TransStreamDemo1
{
public static void main(String [] args)throws IOException{
//获取键盘录入对象
InputStream in = System.in;
//将字节流对象转成字符流对象,使用转换流。InputStreamReader
InputStreamReader isr = new InputStreamReader(in);
//为了提高效率,将字符串进行缓冲区技术高效操作。使用BufferedReader
BufferedReader bufr = new BufferedReader(isr);
String line = null;
while ((line=bufr.readLine())!=null)
{
if("over".equals(line))
break;
System.out.println(line.toUpperCase());
}
bufr.close();
}
}
OutputStreamWriter 字符流通向字节流Writer的子类
例子:
import java.io.*;
class TransStreamDemo
{
public static void main(String [] args)throws IOException{
//获取键盘录入对象
InputStream in = System.in;
//将字节流对象转成字符流对象,使用转换流。InputStreamReader
InputStreamReader isr = new InputStreamReader(in);
//为了提高效率,将字符串进行缓冲区技术高效操作。使用BufferedReader
BufferedReader bufr = new BufferedReader(isr);
OutputStream out = System.out;
OutputStreamWriter osw = new OutputStreamWriter(out);
BufferedWriter bufw = new BufferedWriter(osw);
String line = null;
while ((line=bufr.readLine())!=null)
{
if("over".equals(line))
break;
//System.out.println(line.toUpperCase());
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
bufr.close();//这里不关闭也是可以的 最终是系统关闭in
}
}
//三句话变一句 来简化 键盘录入最常见写法
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw =
new BufferedWriter(new OutputStreamWriter(System.out));
3 流操作规律
(1) 源 键盘录入
目的:控制台
(2) 需求:想把键盘录入的数据存储到一个文件中
源 键盘录入
目的 文件
(3) 需求:想要将一个文件的数据打印在控制台上
源:文件
目的: 控制台
流操作的基本规律:
流对象有很多,通过三个明确来完成
(1).明确源和目的
源:输入流 InputStream Reader
目的:输出流 OutputStream Writer
(2)操作的数据是否是纯文本
是:字符流
不是:字节流
(3)当体系明确后,在明确要使用哪个具体的对象
通过设备来进行区分
源设备:内存,硬盘,键盘
目的设备:内存,硬盘,控制台
4 改变标准输入输出设备
System类中可以改变输入输出设备
static void setIn(InputStream in) 重新分配“标准”输入流。
static void setOut(PrintStream out) 重新分配“标准”输出流。 setOut对象是PrintStream
例如
System.setIn(new FileInputStream("CopyText.java"));
System.setOut(new PrintStream("zz.txt"));
例子:
import java.io.*;
class TransStreamDemo
{
public static void main(String [] args)throws IOException{
System.setIn(new FileInputStream("CopyText.java"));
System.setOut(new PrintStream("zz.txt"));
//获取键盘录入对象
InputStream in = System.in;
//将字节流对象转成字符流对象,使用转换流。InputStreamReader
InputStreamReader isr = new InputStreamReader(in);
//为了提高效率,将字符串进行缓冲区技术高效操作。使用BufferedReader
BufferedReader bufr = new BufferedReader(isr);
OutputStream out = System.out;
OutputStreamWriter osw = new OutputStreamWriter(out);
BufferedWriter bufw = new BufferedWriter(osw);
String line = null;
while ((line=bufr.readLine())!=null)
{
if("over".equals(line))
break;
//System.out.println(line.toUpperCase());
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
bufr.close();
}
}
5 IO异常信息
这里的异常日志信息是和IO流有关联的
Throwable中的printStackTrace有重载方法 printStackTrace(PrintStream s)
例子:
import java.io.*;
import java.util.*;
import java.text.*;
class ExceptionInfo
{
public static void main(String [] args)throws IOException{
try
{
int [] arr=new int[2];
System.out.println(arr[3]);
}
catch (Exception e)
{
try
{
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//将hh改为HH String s= sdf.format(d);
PrintStream ps = new PrintStream("exception.log");
ps.println(s);
System.setOut(ps);
}
catch (IOException ex)
{
throw new RuntimeException("日志文件创建失败");
}
e.printStackTrace(System.out);
}
}
}
6 系统信息
结合流打印
import java.util.*;
import java.io.*;
class SystemInfo
{
public static void main(String [] args)throws IOException{
Properties prop = System.getPropreties();
//System.out.println(prop);//当时用的是遍历集合的方式 是个map集合 map集合在内存中
prop.list(new PrintStream("sysinfo.txt"));
}
}