1 文件输入字节流和输出字节流
文件输入字节流和输出字节流FileInputStream 类和 FileOutputStream 类 ,他们创建的相应对象可以以字节为单位完成对文件的输出和输入操作。
FileInputStream 常用的构造方法
构造方法 | 说明 |
public FileInputStream(File filname) | 由File对象创建FikeInputStream 对象 |
public FileInputStream(String filename) | 由指定文件名创建 FileInputStream对象 |
FileOutputStream 常用的构造方法
构造方法 | 说明 |
public FileOutputStream(File filname) | |
public FileOutputStream(String filename) | |
public FileOutputStream(File filename , boolean append) | 第二个参数表示追加模式开关 |
// package ****
import java.io.* ;
public class Test6_4 {
public static void main(String []args) {
File file = new File("temp.dat") ;
// FileOutputStreamClass fileoutput = new FileOutputStreamClass() ;
// fileoutput.writeout(file); // 传入文件的名字
FileInputStreamClass fileInput = new FileInputStreamClass() ;
fileInput.readPrint(file);
}
}
class FileInputStreamClass{
byte content = -1 ;
FileInputStream fileinput , fileinput1 ;
byte [] temp = new byte[1] ;
public void readPrint(File file) {
try {
fileinput = new FileInputStream(file) ; // 创建字节输入流对象 ;
// 调用无参数的 read 方法 , 以字节为单位读取文件内容并判断是否达到文件尾部
while((content = (byte)fileinput.read())!=-1){
System.out.print(content+"");
}
System.out.println();
fileinput.close();
}catch (IOException ioe ){
System.out.println("文件读取失败") ;
}
try {
fileinput1 = new FileInputStream(file) ;
while((content = (byte)fileinput1.read(temp,0,1))!=-1){
String s = new String(temp,0,1) ;
System.out.print(s);
}
System.out.println();
fileinput1.close();
}catch (IOException ioe ){
System.out.println("文件读取失败");
}
}
}
class FileOutputStreamClass{
FileOutputStream fileoutput , fileoutput1 ;
// 文件输出对象 fileoutput
byte [] front ="前一部分内容".getBytes() ;
byte [] behind ="后一部分内容".getBytes() ;
public void writeout(File file ) { // 向文件中写东西
try {
fileoutput = new FileOutputStream(file);
fileoutput.write(front); // 向文件写入
fileoutput.write(behind);
fileoutput.close(); // 关闭输出流
}catch (IOException ioe){ // 处理异常
System.err.println("文件写出错误");
}
try{
// 如果文件存在并且有内容 ,就追加
fileoutput1 = new FileOutputStream(file,true) ; // 第二个参数是追加 ;
for(int i = 1 ; i<=10 ; i++) {
fileoutput1.write(i) ;
}
fileoutput1.close(); // 关闭输出流
}catch (IOException ioe) {
System.err.println("文件写出错误");
}
}
}
2 字节过滤流
字节输入流和字节输出流只能以字节为单位进行读取数据 , 不能以某一部分数据为单位。java.io 包内提供的字节过滤流 FilterInputStream 和 FilterOutputStream 可以满足需要 。
需要处理基本数据类型时 , 使用FilterInputStream 和 FilterOutputStream 的子类 DataInputStream 和 DataOutputStream
来过滤字节。
例子 :
将学生的名字和分数写入到指定文件中 ,然后将这个文件中的学生名字和分数 读出到显示器中。
package homework.StreamChapter;
import java.io.* ;
public class Test6_5 {
public static void main(String [] args){
File file = new File("data.txt") ;
DataStreamClass dataStream = new DataStreamClass() ;
dataStream.fileoutput(file) ;
dataStream.fileinput(file) ;
}
}
class DataStreamClass{
FileOutputStream fileout ;
FileInputStream filein ;
DataOutput dataout ;
DataInput datain ;
public void fileoutput(File file ){
try{
//创建指定文件的文件字节输出流和 数据输出流对象
fileout = new FileOutputStream(file) ;
dataout = new DataOutputStream(fileout) ;
// 将学生姓名 和分数 写出到文件中
dataout.writeUTF("张三");
dataout.writeDouble(86.6);
dataout.writeUTF("李明");
dataout.writeDouble(79.9) ;
dataout.writeUTF("王刚");
dataout.writeDouble(90.8);
// dataout.close() ;
fileout.close();
}catch (IOException ioe){
System.out.println("文件写出错误");
}
}
public void fileinput(File file){ // 读出
try {
filein = new FileInputStream(file) ;
datain = new DataInputStream(filein) ;
while (true){
System.out.println(datain.readUTF() +" "+datain.readDouble());
}
}catch (EOFException eoe) {
System.out.println("文件读入完毕" +eoe);
}
catch (IOException ioe){
System.out.println("文件读取失败"+ioe);
}
}
}