输入流与输出流的理解
流就相当于一个通道,当要建立于外界的数据交换时,险要建立通道,然后才能传输数据。
文件输入流 FileInputStream
FileInputStream fis=new FileInputStream(File file)
输入参数 是一个 File类型的文件 这样就建立了该文件的通道
fis.read() 读取一个byte(字节数据) 返回值为读取的这个数据,再调用一次这个方法时,则读取下一个byte(字节数据)
ex.
File f =new File(“D:/eclipse/test.txt”);
FileInputStream fis =new FileInputStream(f);
int s=fis.read();
int p=fis.read();
System.out.println(s);
System.out.println(p);
结果为49 50 (49和50,对应着test文件中写入的1和2)
fis.read(byte[] b) 以byte(字节数据)形式读入一个文件,读入的每个字符数据保存在byte数组中,返回值是一个int,用来表示文件中的字节数。
准备文件lol.txt其中的内容是AB,对应的ASCII分别是65 66
File f =new File(“d:/lol.txt”);
FileInputStream fis =new FileInputStream(f);
//创建字节数组,其长度就是文件的长度
byte[] all =new byte[(int) f.length()];
//以字节流的形式读取文件所有内容
fis.read(all);
for (byte b : all) {
//打印出来是65 66
System.out.println(b);
}
fis.read(byte[] b,int offset,len) 以字节(byte)形式读取一个文件,写入byte 数组,offset规定了写入byte的具体位置,len规定了写入长度。再调用时,读取从上一次截止的下一个字节开始。
文件输出流 OutputStream
fos.write(byte[] b); 向文件fos中写下b中包含的字节
// 准备文件lol2.txt其中的内容是空的
File f = new File("d:/lol2.txt");
// 准备长度是2的字节数组,用88,89初始化,其对应的字符分别是X,Y
byte data[] = { 88, 89 };
// 创建基于文件的输出流
FileOutputStream fos = new FileOutputStream(f);
// 把数据写入到输出流
fos.write(data);
标准的关闭流的方式
1. 首先把流的引用声明在try的外面,如果声明在try里面,其作用域无法抵达finally.
2. 在finally关闭之前,要先判断该引用是否为空
3. 关闭的时候,需要再一次进行try catch处理
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class TestStream {
public static void main(String[] args) {
File f = new File("d:/lol.txt");
FileInputStream fis = null;
try {
fis = new FileInputStream(f);
byte[] all = new byte[(int) f.length()];
fis.read(all);
for (byte b : all) {
System.out.println(b);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
// 在finally 里关闭流
if (null != fis)
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
把流定义在try()里,try,catch或者finally结束的时候,会自动关闭。这种编写代码的方式叫做 try-with-resources, 这是从JDK7开始支持的技术。
所有的流,都实现了一个接口叫做 AutoCloseable,任何类实现了这个接口,都可以在try()中进行实例化。 并且在try, catch, finally结束的时候自动关闭,回收相关资源。
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class TestStream {
public static void main(String[] args) {
File f = new File("d:/lol.txt");
//把流定义在try()里,try,catch或者finally结束的时候,会自动关闭
try (FileInputStream fis = new FileInputStream(f)) {
byte[] all = new byte[(int) f.length()];
fis.read(all);
for (byte b : all) {
System.out.println(b);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}