InputStream
InputStream是一个抽象类,是一个字节流,一次读取一个字节。
read()方法,读取下一个字节数据,并自动转换为int类型。如没有数据可以读取则返回-1;
read(byte[])方法,读取多个字节数据,并写到byte[]中,返回读取的字节数。返回-1表示数据流结束;
close():无返回值方法,用于关闭流。
OutputStream
OutputStream是一个抽象类,是一个字节流,一次写出一个字节。
write(int b):无返回值方法,向输出流中写一个字节。
write(byte[],int off,int len) 将byte[]数组中的数据从off位置开始,写到输出流中,到len个字节。
close():无返回值类型,用于关闭流。
FileInputStream
FileInputStream是InputStream的子类,是一个节点流,可以从一个文件中读取数据,参数可以是String、File和FileDescriptor,一般多使用String类型参数。
FileNotFoundException是一个受检型异常、非运行时异常。
捕捉异常try-resources的写法,用于简化编程,可以避免使用finally进行资源关闭操作
try (InputStream is = new FileInputStream("data\\sum.txt")) {
int kk=0;
while((kk=is.read())!=-1) {
System.out.print((char)kk);
}
}
文件拷贝
一次操作一个字节可以拷贝任何内容的文件
try (
// 准备资源
InputStream is = new FileInputStream("data\\long.txt");
OutputStream os = new FileOutputStream("data\\xin.txt");) {
// 从输入流中读取数据
int bb=is.read();
while(bb!=-1) {
// 向输出流中写出数据
os.write(bb);
bb=is.read();
}
}
但是一次一字节读写硬盘的次数太多,所以会导致执行效率低。可以一次读取多个字节内容。
try (
// 准备资源
InputStream is = new FileInputStream("data\\long.txt");
OutputStream os = new FileOutputStream("data\\xin.txt");) {
byte[] buffer = new byte[8192];
int len = is.read(buffer); // 从is中读取最多8192个字节的数据写入到byte[]中,返回读取的字节数
while(len>0) {
os.write(buffer,0,len); //读取了len个字节的数据,则写出len个字节
len=is.read(buffer);
}
}
简化写法
try (InputStream is = new FileInputStream("data\\long.txt");
OutputStream os = new FileOutputStream("data\\xin.txt");) {
byte[] buffer=new byte[8192];//8k
int len=0;
while((len=is.read(buffer))>0) {
os.write(buffer,0,len);
}
}
基本输入输出方法
System类是java中功能非常强大的、非常有用的类,提供了标准输入/输出和运行时系统的系统信息
- 1、System类不能创建对象,所有方法和属性都是静态的,例如System.getProperty和System.in
- 2、System.in:InputStream流对应于键盘输入或由指定的其他输入源
-
System.out:把输出送到缺省的输出流中,屏幕显示
-
System.err:一般用于把错误信息传送到缺省的错误流中,默认屏幕显示,红色
- 从键盘读取数据 Scanner sc=new Scanner(System.in);