字节流可以处理一切文件,主要介绍常用两类:
-
InputStream中的FileInputStream:
从文件读取数据至流内。
package SAMPLE.IO流;
import java.io.*;
/*文件 字节输入流
1、确定源文件
2、选择流 文件输入流:FileInputStream
3、操作(读取/分段读取)
4、释放资源
*/
public class InputStream字节流 {
public static void main(String[] args) {
//选择源文件
File src = new File("C:\\Users\\kvnoe\\Desktop\\Jcase\\aaa.txt");
//选择流
InputStream is = null;//扩展作用域
try {
is = new FileInputStream(src);
//操作(读取)
int temp;
while((temp=is.read())!=-1){
System.out.println((char)temp);
}
//操作(分段读取)
byte[] flush = new byte[3];//缓存容器
int len = -1;//接收长度
while((len=is.read(flush))!=-1){//is.read(flush)返回一个int,为此次read中flush读入字节数
//字节数组-->字符串(解码)
String str = new String(flush,0,len);//若不规定区间[0,len]则会输出空字符
System.out.println(str);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("文件不存在");
} catch (IOException e) {
e.printStackTrace();
System.out.println("读取文件失败");
}finally {
//释放资源close
try {
if(is!=null)//若src成功输入流
is.close();
} catch (IOException e) {
e.printStackTrace();
System.out.println("关闭文件输入流失败");
}
}
}
}
小结:
1、字节数组flush作为缓冲容器,存放流中的字节数据。
2、异常机制。
-
OutputStream中的FileOutputStream:
从流内读取数据至文件。
package SAMPLE.IO流;
import java.io.*;
/*文件 字节输出流
1、确定源文件
2、选择流 文件输入流:FileInputStream
3、操作(读取/分段读取)
4、释放资源
*/
public class OutputStream字节流 {
public static void main(String[] args) {
//选择/创建源文件
File dest = new File("C:\\Users\\kvnoe\\Desktop\\Jcase\\bbb.txt");
//选择流
OutputStream os = null;//扩展作用域
try {
os = new FileOutputStream(dest,false);//append为True:追加,False:覆写。默认为False
//操作(写出)
String msg = "IO? just so so";
byte[] datas = msg.getBytes();//字符串-->字节数组(编码)
os.write(datas,0,datas.length);
os.flush();
/*} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("文件不存在");OutputStream中若目标文件不存在则自动创建*/
} catch (IOException e) {
e.printStackTrace();
System.out.println("写出文件失败");
}finally {
//释放资源close
try {
if(os!=null)
os.close();
} catch (IOException e) {
e.printStackTrace();
System.out.println("关闭文件输出流失败");
}
}
}
}
小结:
1、FileOutputStream具有追加写和覆写两种形式,默认为覆写。
2、数据在字节流中以字节的形式流动,可用getBytes()方法将非字节数据转换为字节数据。
3、最后必须调用flush()方法强制刷出,因为可能会有部分数据残留在缓冲区,导致写出数据不完 整。
-
利用字节流实现文件拷贝:
InputStream和OutputStream的实例运用。
package cn.test;
import java.io.*;
/*字节流实现文件拷贝
1、选择文件:源文件src,目标文件dest。
2、选择流:
src-->InputStream
dest-->OutputStream
3、操作(拷贝):
数据以字节流byte[]形式从src经过流流入dest,拷贝完成。
4、释放资源,关闭所有流,一般先打开的后关闭。
*/
public class 字节流实现文件拷贝 {
public static void main(String[] args) {
String srcPath = "C:\\Users\\kvnoe\\Desktop\\Jcase\\aaa.txt";
String destPath = "C:\\Users\\kvnoe\\Desktop\\Jcase\\bbb.txt";
copy(srcPath,destPath);
}
public static void copy(String srcPath,String destPath){
File src = new File(srcPath);
File dest = new File(destPath);
InputStream is = null;
OutputStream os = null;
try {
is = new FileInputStream(src);
os = new FileOutputStream(dest,true);
int len =-1;
byte[] flush = new byte[3];
while((len=is.read(flush))!=-1){
os.write(flush,0,len);
}
os.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {//先打开的后关闭
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
if(is!=null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
小结:
先打开的文件后关闭。