输出输入流
输出输入流技术用于处理设备之间的数据传输,指的是程序和外部设备或者其他计算机进行数据交换的过程,比如读/写文件、网络通信等。
输入:把硬盘等储存设备的数据读取到程序中的过程
输出:把程序中的数据输出到磁盘等储存设备的过程
一、文件输出输入流
文件的输出输入流有两种:一种是以字符为单位的FileReader
和FileWriter
,第二种是以字节为单位的FileInputStream
和FileOutputStream
。需要在try代码块中完成对输出输入流的操作,在catch代码块中对可能抛出的异常进行捕获处理,在finally代码块中关闭输出输入流,并且关闭操作也需要在try-catch代码块中书写。
package com.sw.t1;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class File1Test {
public static void main(String[] args) {
//输出流
FileWriter fw = null;
String str = "hello world";//给定一个字符串用于写到文件中去
try{
fw = new FileWriter("hello.txt",true);//此处的文件名如果没有加路径的话生成的
//文件会放到默认的文件夹中,如果需要自定义的话就需要加上路径名
//如:F:\File\hello.txt,是把hello.txt放到F盘的File文件夹中
//若果已经存在名为hello.txt的文件了,就不会新建,此时就需要看第二个参数
//如果是true的话会把str的内容加到hello.txt的末尾处,不然的话会直接替换
//原来的所有内容,若果不写的胡相当于是false
fw.write(str,0,str.length());
}catch (IOException e) {
e.printStackTrace();
}finally {
if(fw != null) {
try {
fw.close();//关闭流资源
}catch (IOException e) {
e.printStackTrace();
}
}
}
//输入流
FileReader fr = null;
try{
fr = new FileReader("hello.txt");//准备读取刚刚写入的内容
char[] s = new char[11];
fr.read(s);//把内容读到一个字符数组的缓冲区
String str1 = new String(s);
System.out.println(str1);//输出hello world
}catch (IOException e) {
e.printStackTrace();
}finally {
if(fw != null) {
try {
fr.close();
}catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
//第二种与这种类似,只是读取数据的单位不同
二、缓冲区输出输入流
缓冲区输出输入流提供了一个内部的缓冲区数组,提升了工作的效率。默认是8kb的缓冲区。BufferedReader类中提供了readLine()方法,可以以文本行为单位读取数据,从输入流读取一行字符,遇到流结束则返回null。
在名为hello.txt的文件中存放如下4行内容
hello world 123 456 789
package com.sw.t1;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class File2Test {
public static void main(String[] args) {
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader("hello.txt");
br = new BufferedReader(fr);
String data;
while ((data = br.readLine()) != null) {//按行读取数据,流结束则返回null
System.out.println(data);
}
}catch (IOException e) {
e.printStackTrace();
}
}
}
//测试结果,每次都读取了一行hello.txt中的内容
/*hello world
123
456
789*/