Java 文件输入字节流和输出字节流

      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);
        }
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值