FileInputStream 和 FileOutputStream

来源:互联网 发布:excel2003删除重复数据 编辑:程序博客网 时间:2024/05/16 00:36

FileInputStream 是从文件系统当中的某个文件中获取输入字节,获得的是原始字节流,如果想要获得字符流,需要使用FileReader

FileOutputStream是将数据写入文件的输出流。 FileWriter

 buffer.length

String.length()

 

下面给出程序实例,实现以字节流方式读取文件。

import java.io.FileInputStream;import java.io.File;import java.io.IOException;/* *原始程序在读取数字的时候会将第一个数字丢失 while(fs.read()!=-1) 这里已经读取了 *还有就是当数据字节数不够9字节的时候,如果不进行处理的话会出现错误的输出结果 *b.length   fs.read(b) 返回的是读入输入流的字节数  如果没有读入数据就返回-1 *如果是fs.read()的话就是一个一个自己的读取了 *通过System.out.println(fs.read());可以获取第一个字节的数据 */public class FileInputStreamDemo {public static void main(String[] args) throws IOException{  File f = new File("f:/work/file0.txt");      FileInputStream fs = new FileInputStream(f);byte [] b = new byte[9]; //while(fs.read()!=-1)  是这句话将第一个字符吞掉了int  length =0;while((length=fs.read(b))!=-1)//这样才行           {    //System.out.println(new String(b,"gb2312"));    String str = new String(b,0,length);    System.out.println(str); }     }}


 

read只会读取一个字节 不会自动读取下一个 只会读第一个字节 和指针不是一回事
如果想用字节流读完文件 一般用一个字节数组的缓冲区 比如200
byte[] buffer = new byte[200];//创建字节数组
    
        int length = 0;
    
        while(-1 != (length = is.read(buffer, 0, buffer.length))){
          String str = new String(buffer,0,length);
           System.out.println(str);
        }

评论(1)|已赞1

如果使用read()方法的话,就要循环不停的读取,但是循环的终止条件呢?

FileInputStream 的构造方法 

FileInputStreamFile file

FileInputStreamString fileAddress

int available()  该方法返回可以不受阻塞地从此文件输入流中读取的字节数

int  read()

该方法从输入流中读取第一个数据字节,返回int类型的数据

FileInputStream  fs = new FileInputStreamf:work/file0.txt;

System.out.println(fs.read());  //显示第一个字节

int read(byte [] b)

从输入流中最多将b.length个字节的数据读入一个字节数组,

int  read(byte[] b,int off,int len)

从输入流中的第off个索引的位置读取最多len个字节的数据放入到一个字节数组当中。

import java.io.File;import java.io.FileOutputStream;import java.io.IOException;public class FileOutputStreamDemo {public static void main(String[] args) throws IOException{//创建File对象 File f = new File("f:/work/file.txt");//创建输出字节流        FileOutputStream fo = new FileOutputStream(f);                   //创建字节数组byte   buffer[]=new   byte   [10];             buffer[0]=48;     buffer[1]=49;        buffer[2]=50;     buffer[3]=51;        buffer[4]=52;     buffer[5]=53;       buffer[6]=54;     buffer[7]=55;           buffer[8]=56;     buffer[9]=57;   //初始化字节数组fo.write(buffer);   //写入文件//System.out.println(buffer);System.out.println(new String(buffer,"gb2312"));System.out.println(new String(buffer,"gb2312"));String b = new String(buffer,0,buffer.length);System.out.println(b);}}


 

void write(byte[] b)

该方法将b.length个字节从指定字节数组写入到此文件输出流当中,无返回值,如下语句将字节数组写入到磁盘文件当中。

File  file = new File(f:\\work\file.txt);

FileOurputStream f = new FIleOutputStream(f);

byte[] b = new byte[10];

f.write(b);

void  write(byte[] b, int off,int len)

void  write(int b)

将指定字节的数据写入到此文件输出流当中,b为字节对应的编码  如下语句将会输出数字到磁盘文件:

File f = new File(f:\\work\file.txt);

FileOurputStream f = new FIleOutputStream(f);

f.write(49);

 

昨天遇到的关于FileInputStream.read()  方法是直接读取一个字节而返回一个整型,事实上来说昨天看错了,是返回这个字节的编码

然后利用FileOutputStream.write(int b)

方法将数据写入输出流就行了。

原创粉丝点击