一、背景
1.IO流有很多种,按照操作数据的不同,可以分为字节流和字符流,按照数据传输的方向不同又可以分为输入流和输出流,程序从输入流中读取数据,向输出流中写入数据,因为都是在IO包下面,所以就叫IO流。
2.在IO包中,字节流的输入输出流分别用java.io.InputStream和java.io.OutputStream表示,字符流的输入输出流分别用java.io.Reader和java.io.Writer表示。
二、字节流读文件的实例
1.由于计算机中的数据基本都是保存在硬盘的文件中,因此操作文件中的数据是常见的操作,在操作文件时,最常见的就是从文件中读取数据并将数据写入文件,即文件的读写,针对文件的读写,JDK专门提供了俩个类,分别是FileInputStream和FileOutputStream.
2.代码示例(test.txt中的内容student)
public static void main(String[] args) throws Exception {
//创建一个文件字节输入流
FileInputStream in = new FileInputStream("D://test.txt");
//定义一个int类型的变量b,记住每次读取的一个字节的ascill码
int b =0;
while (true){
//变量b记住读取的一个字节
b = in.read();
if (b ==-1){//如果读取的字节为-1,跳出while循环
break;
}
System.out.println(b);//否则将b写出
}
in.close();
}
3.结果
115
116
117
100
101
110
116
4.分析
1.创建的字节流FileInputStream通过read()方法将当前目录文件test.txt中的数据读取并打印。
三、字节流文件写操作实例
1.与FileInputStream对应的是FileOutputStream,FileOutputStream是OutputStream的子类,它是操作文件的字节输出流,专门用于把数据写入文件。
2.代码示例(D://test1.txt是自动生成的)
public static void main(String[] args) throws Exception {
//创建一个文件字节输出流
FileOutputStream out = new FileOutputStream("D://test1.txt");
String string = "我是学生";
byte[] bytes = string.getBytes();
for (int i = 0;i<bytes.length;i++){
out.write(bytes[i]);
}
out.close();
}
3.结果
我是学生
四、另外改进的例子
1.问题描述
从前面的例子可以看出,IO流在进行数据读写操作的时候会出现异常,为了代码的简洁,在程序中直接使用throws关键字将异常抛出,然而一旦遇到IO异常,IO流的close()方法将无法得到执行,流对象所占用的系统资源将得不到释放,因此为了保证IO流的close()方法必须执行,通常将关闭流的操作写在finally代码块中。
2.代码
public static void main(String[] args){
//创建一个文件字节输出流
FileOutputStream out = null;
try {
out = new FileOutputStream("D://test1.txt",true);
String string = "我是学生哈哈哈";
byte[] bytes = string.getBytes();
for (int i = 0;i<bytes.length;i++){
out.write(bytes[i]);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if (out!=null){//如果out不为空,关闭输出流
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.结果
我是学生我是学生哈哈哈
五、结束
1.今天就说到这里,简简单单的入门,后面的内容下次继续讲!!!