1.IO流概述
IO流:输入输出流(Input/Output)
流是一组有顺序的,有起点和终点2的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输为流,流的本质是数据传输,更具数据传输特性将流抽象为各种类,方便直观地运行数据操作。
IO流的分类
根据处理数据类型的不同分为:字符流和字节流
根据数据流向不同分为:输入流和输出流
程序向文件中输入信息那叫输出
程序从文件中读取数据,那叫输入
IO结构图
2.字节输出流
OutputStream类定义
public abstract class OutputStream extends Object implements Closeable,Flushable
此抽象类是表示输出字节流的所有类的超类。输出流接受输出字节并将这些字节发送到某个接收器。
void close( ) | 关闭此输出流并释放与此流有关的所有系统资源 |
void flush( ) | 刷新此输出流并强制写出所有缓冲的输出字节 |
void write(byte[ ] b) | 将b.length个字节从指定的byte数组写入此输出流 |
void write(byte[ ] b,int off,int len) | 将指定byte数组中从偏移量off开始的len个字节写入此输出流 |
abstract void write(int b) | 将指定的字节写入此输出流 |
OutputStream类只是一个抽象类,抽象类必须通过子类完成,现在要向文件中输出,使用FileOutputStream类
FileOutputStream(File file) | 创建一个向指定File对象表示的文件中写入数据的文件输出流 |
FileOutputStream(File file,boolean append) | 创建一个向指定File对象表示的文件中写入数据的文件输出流 |
FileOutStream(String name) | 创建一个向具有指定名称的文件中写入数据的输出文件流 |
FileOutStream(String name,boolean append) | 创建一个向具有指定name的文件中写入数据的输出文件流 |
3.字节输出流
InputStream类定义:
public abstract class InputStream extends Object implements Closeable
此抽象类是表示字节输入流的所有类的超类
void close() | 关闭此输入流并释放与该流关联的所有系统资源 |
abstract int read() | 此输入流中读取数据的下一个字符 |
int read(byte[ ] b) | 从输入流中读取一定数量的字节,并将其存储在缓冲区数字b中 |
int read(byte[ ] b,int off,int len) | 将输入流中最多len个数据字节读入byte数组 |
FileInputStream 从文件系统中的某个文件中获得输入字节,哪些文件可用取决于主机环境。FileInputStream用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用FileRead。
FileInputStream(File file) | 通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的File对象file指定 |
FileInputStream(String name) | 通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的路径名name指定 |
package com.vince.bytestream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class InputStreamDemo {
/**
* 字节输入流的读取方式三:每次读取指定大小的字节
*/
public static void read3(){
try {
File f = new File("d:\\1.txt");
//构造一个字节输入流对象
InputStream in = new FileInputStream(f);
//指定每次要读取的字节数组
byte[] bytes = new byte[10];
int len = -1;//每次读取的实际长度
StringBuilder sb = new StringBuilder();
while((len = in.read(bytes))!=-1){
sb.append(new String(bytes,0,len));
}
//关闭
in.close();
//输出
System.out.println(sb);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 字节输入流的读取方式二:一次性读取所有字节
*/
public static void read2(){
try {
File f = new File("d:\\1.txt");
//构造一个字节输入流对象
InputStream in = new FileInputStream(f);
//根据文件的大小构造字节数组
byte[] bytes = new byte[(int)f.length()];
int len = in.read(bytes);
System.out.println(new String(bytes));
System.out.println("len="+len);
//关闭
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 字节输入流的读取方式一:每次读取一个字节
*/
public static void read1(){
try {
//构造一个字节输入流对象
InputStream in = new FileInputStream("d:\\1.txt");
int b = -1;//定义一个字节,-1表示没有数据
while((b=in.read())!=-1){
System.out.print((char)b);
}
//关闭
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// read1();
// read2();
read3();
}
}
package com.vince.bytestream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class OutputStreamDemo {
/**
* 字节输出流的方式二:每次输出指定大小的字节
*/
public static void write2() {
try {
// 创建一个文件字节输出流对象(参数true表示追加输出)
OutputStream out = new FileOutputStream("d:\\1.txt", true);
// String info = "hello,xiaobai";
String info = "one car come,one car go,two car pengpeng,one car die!";
byte[] bytes = info.getBytes();
out.write(bytes);// 输出一个字节数组
// out.write(bytes,0,5);//输出一个字节数组中的指定范围的字节
// 关闭流
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 字节输出流的方式一:每次输出一个字节
*/
public static void write1() {
try {
// 创建一个文件字节输出流对象
OutputStream out = new FileOutputStream("d:\\1.txt");
String info = "hello,IO";
byte[] bytes = info.getBytes();
for (int i = 0; i < bytes.length; i++) {
// 向文件中输出
out.write(bytes[i]);
}
// 关闭流
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// write1();
write2();
System.out.println("success");
}
}