IO输入输出流简析
1.Java中主要通过File类实现与硬盘上文件的联系。
注:
1.1 File仅代表一个联系,可能文件存在,也可能不存在;
1.2 这里的文件可以是文件,也可以是文件夹。
2.IO流的种类
2.1按照处理 数据单位 分为:字节流(8位)(byte)和字符流(16位)(char)。
字节流:能够处理音视频等其他一切文件,InputStream 和 OutputStream
字符流:仅能处理文本,Reader 和 Writer
2.2按照 流向 分类
输入流:数据源到程序(InputStream、Reader) 读取文件
输出流:程序到目的地(OutPutStream、Writer) 写入文件
2.3功能 分类
节点流:可以直接从数据源或目的地读写数据。
处理流::不直接连接到数据源或目的地,是处理流的流。通过对其他流的处理提高程序的性能。
3.操作步骤
3.1 明确目的(读取文件还是写文件)
3.2 找准源头(读取)
3.3 找准目的(写出)
在程序中主要分为以下几步:
1.建立练习:抽象文件对象
2.选择流:创建输入输出流等对象
3.执行操作:对需要执行的操作进行执行
4.释放资源:需要手动关闭
4.基本输入流
Reader
import java.io.File;
import java.io.FileReader;
import java.io.Reader;
/*
读取一个文件中的字符
1、确定目标
2、选择流
3、读取
4、释放资源
*/
public class Demo002 {
public static void main(String[] args) throws Exception {
//确定目标,
// 本次文件建立在相对路径下的,测试的时候使用者可自行修改路径
File file=new File("a.txt");
//检验文件是否存在
System.out.println(file.exists());
//获取当前目录|文件的绝对路径
System.out.println(file.getAbsolutePath());
//选择流
Reader r=new FileReader(file);
//循环读取
//临时变量存储每一次读取到的数据
//由于此处read()方法每次执行都会读取下一个字符,需要存储变量实现全部遍历
//否则没执行一次便向下一个字符移动一次
int i;
int num=0;
//当读取到的内容不为-1,继续读
while ((i=r.read())!=-1){
System.out.print(num++ +" ");
System.out.print((char)i);
System.out.println();
}
/*while(r.read()!=-1){
System.out.print(num++ +" ");
System.out.print((char)r.read());
System.out.println();
}*/
//释放资源
r.close();
}
}
方式二:
FileInputStream
此处异常通过try- catch 捕获,也可向上面的代码一样进行简化
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
/*
字节流
*/
public class Demo004 {
public static void main(String[] args) {
//确定源头
File file=new File("a.txt");
//选择流
InputStream in=null;
//准备临时存储数据的空间
byte[] car=new byte[9];
try{
in=new FileInputStream(file);
//读取
// 将读取的字节内容 存入 byte[] car, 返回实际读取到的字节数
int len=in.read(car);
System.out.println(len +"实际读取到的字节数");
// 利用读取到的实际字节数 , 拼成一个字符串
String s=new String(car,0,len);
System.out.println(s);
//遍历byte数组
System.out.println(Arrays.toString(car));
}catch(Exception e){
e.printStackTrace();
}finally{
try{
// 释放资源
if(null!=in){
in.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
}
}
5.基本输出流
Writer
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
/*
写出数据(字符)到文件
1、确定目的地
2、选择流和目的地建立联系
3、写数据出去
3.1 强刷数据
4、释放资源(关闭流)
写出 nice 到 test.txt 的文件
*/
public class Demo006 {
public static void main(String[] args) throws Exception {
//1.确定目的地
//文件不存在的时候会自动创建
//文件存在会覆盖原文件
File file=new File("test.txt");
//2.选择流
Writer writer=new FileWriter(file);
//3.写出数据
char[] data={'n','i','c','e'};
writer.write(data);
String str=" to meet you.";
writer.write(str);
//4.强刷
writer.flush();
//5.关闭流
writer.close();
}
}
方式二:
OutputStream
FileOutputStream
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
/*
字节输出流 只能是字节
*/
public class Demo007 {
public static void main(String[] args) throws Exception {
// 确定目的地
File file = new File("test1.txt");
// 选择流
OutputStream os=new FileOutputStream(file);
// 写数据
byte[] data="nice!!!".getBytes("GBK");
os.write(data);
//刷新
os.flush();
//关闭流
os.close();
}
}