字节流可以处理一切文件
主要介绍两个最常用的类
一、InputStream中的FileInputStream
读取文件:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
/**
* 文件的读取
* 1、建立联系 File对象
2、选择流 文件输入流 InputStream FileInputStream
3、操作 : byte[] car =new byte[1024]; +read+读取大小
输出
4、释放资源 :关闭
* @author Administrator
*
*/
public class Demo01 {
/**
* @param args
*/
public static void main(String[] args) {
//1、建立联系 File对象
File src =new File("e:/xp/test/a.txt");
//2、选择流
InputStream is =null; //提升作用域
try {
is =new FileInputStream(src);
//3、操作 不断读取 缓冲数组
byte[] car =new byte[1024];
int len =0; //接收 实际读取大小
//循环读取
StringBuilder sb =new StringBuilder();
while(-1!=(len=is.read(car))){
//输出 字节数组转成字符串
String info =new String(car,0,len);
sb.append(info);
}
System.out.println(sb.toString());
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("文件不存在");
} catch (IOException e) {
e.printStackTrace();
System.out.println("读取文件失败");
}finally{
try {
//4、释放资源
if (null != is) {
is.close();
}
} catch (Exception e2) {
System.out.println("关闭文件输入流失败");
}
}
}
}
小结:
1.car数组是做缓冲用的,决定了单次读取文件的字节数,由于是字节流,所以必须是字节数组。
2.构造器必须传入File对象
3.异常机制
二、OutputStream与FileOutStream
写出文件:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
* 写出文件
1、建立联系 File对象 目的地
2、选择流 文件输出流 OutputStream FileOutputStream
3、操作 : write() +flush
4、释放资源 :关闭
* @author Administrator
*
*/
public class Demo02 {
/**
* @param args
*/
public static void main(String[] args) {
//1、建立联系 File对象 目的地
File dest =new File("e:/xp/test/test.txt");
//2、选择流 文件输出流 OutputStream FileOutputStream
OutputStream os =null;
//以追加形式 写出文件 必须为true 否则为覆盖
try {
os =new FileOutputStream(dest,true);
//3、操作
String str="bjsxt is very good \r\n";
//字符串转字节数组
byte[] data =str.getBytes();
os.write(data,0,data.length);
os.flush(); //强制刷新出去
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("文件未找到");
} catch (IOException e) {
e.printStackTrace();
System.out.println("文件写出失败");
}finally{
//4、释放资源 :关闭
try {
if (null != os) {
os.close();
}
} catch (Exception e2) {
System.out.println("关闭输出流失败");
}
}
}
}
小结:
1.在构造FileOutputStream对象时,除了传递File对象外,还需传递是否覆盖的bool值,true--->不覆盖,flase--->覆盖,默认为flase。
2.在写入之前,需要先将输入数据转化为字节数字,可通过getBytes()方法实现
3.最后必须调用flush()方法强制刷出,因为可能会有部分数据残留在缓冲区,导致写出数据不完整(与抽水十分相似)。