您的位置:首页 > 编程语言 > Java开发

java之文件

2016-04-01 20:27 567 查看
流(stream)是指一组有顺序的、有起点和终点的字节集合,是对数据传输的总称或抽象。
流的方向:数据由外部输入设备流向内存的过程称为数据输入;由内存流向外部输出设备的过程称为数据输出。因此,从程序所在的内存角度看,流入内存的为输入流,流出内存的为输出流。
流的基本操作:读和写。从流中取得数据的操作称为读;向流中添加数据的操作称为写。输入流只能进行读;输出流只能进行写。

流采用缓冲区技术:对流进行读/写操作,一次只能读/写一个字节,数据传输效率低。为提高效率,将一块内存空间设计成缓冲区。配备缓冲区的流称为缓冲流。
n当向流写入数据时,数据被发送到缓冲区,当缓冲区满时,系统将数据全部发送到相应的设备。如果在此之前要传输数据,可以使用flush()操作;
n当从流读取数据时,系统实际从缓冲区读。当缓冲区空时,系统就从相关设备自动读取数据充满缓冲区。

java.io包中的数据流
 ★字节流:以字节作为流中元素的基本类型。
 ★字符流:以字符作为流中元素的基本类型。

 InputStream 
抽象的字节输入流根类
 OuputStream 
抽象的字节输出流根类
 Reader  抽象的字符输入流根类
 Writer  抽象的字符输出流根类

InputStream类的子类

OutputStream类的子类

Java的标准输入/输出

标准输入System.in对象是键盘
标准输出System.out对象是显示器屏幕

标准错误输出System.err对象是显示器屏幕

文件字节流

FileInputStream fin =
new FileInputStream (“文件1”); 

//创建文件1的输入流对象

count= fin.read(buffer);                     

//从文件1中读取的数据放入数组buffer中, count中是返回读出的字节数,当返回-1时文件读完。

fin.close();

 //关闭输入流

FileOutputStream fout= new 
FileOutputStream(“文件1”);

  //创建文件1的输出流对象

  fout.write(buffer);                              

 //将buffer数组中的数据写入输出流,即写入到文件中。

  fout.close();                                    

 //关闭输出流

append:默认false

 true为添加方式,数据添加在原文件的末尾
 false为重写方式,数据从原文件开始处写入,覆盖文件中原有的数据。
读文件时指定文件不存在,抛出异常;

写文件时指定文件不存在,则创建一个新文件写入数据。

数据字节流

数据字节流是在字节流的基础上对数据进行加工!!

FileInputStream fin =
new FileInputStream (“文件1”); 

//创建文件1的输入流对象

DataInputStream din=
new DataInputStream(fin);

arrInt = din.readInt();

//从文件1中读取一个int类型数据放入arrInt变量中。

din.close();

fin.close();

 //关闭输入流

FileOutputStream fout= new 
FileOutputStream(“文件1”);

  //创建文件1的输出流对象

 DataOutputStream dout =
new DataOutputStream(fout);

  dout.writeInt(arrInt);

 //将int 类型变量arrInt中的数据写入输出流,即写入到文件中。

  dout.close();

  fout.close();                                    

 //关闭输出流

对象字节流

对象流可以直接写入或读取一个对象。对象流分为对象输入流ObjectInputStream和对象输出流ObjectOutputStream。它们必须建立在其他流之上。传输的关键是把有特殊结构的对象进行序列化,然后通过其他流来进行传输。

对象输入流ObjectInputStream:用于恢复那些序列化的对象。

FileInputStream fin =
new FileInputStream (“文件1”); 

//创建文件1的输入流对象

ObjectInputStream din= new
ObjectInputStream (fin);

arrInt = (强制类型转换)din.readObject();

//从文件1中读取一个对象数据放入对象变量arrInt中。

din.close();

fin.close();

 //关闭输入流

FileOutputStream fout= new 
FileOutputStream(“文件1”);

  //创建文件1的输出流对象

 ObjectOutputStreamdout = new
ObjectOutputStream(fout);

  dout. writeObject(arrInt);

 //将对象arrInt写入输出流,即写入到文件中。

  dout.close();

  fout.close();                                    

 //关闭输出流

由于一个类的对象包含多种信息,为了保证从对象流中能够读取到正确的对象,要求所有写入对象流的对象都必须是序列化的对象。
如果一个可序列化的对象包含对某个不可序列化的对象的引用,那么整个序列化操作将会失败,并且会抛出一个NotSerializableException

文件字符流

文件字符流FileReader和FileWriter类:
         用于文件字符的输入输出处理,与文件字节流类FileInputStream、FileOutputStream的功能相似。

FileReader文件字符输入流:

publicFileReader(Filefile)throws
FileNotFoundException
publicFileReader(StringfileName)throws
FileNotFoundException
publicintread()throws
IOException
publicintread(char
cbuf[])throws
IOException

FileWriterfout = new
FileWriter(“文件1”);

//创建文件1的输出流对象

fout.write(“abc");


//向文件字符输出流写入一个字符串
fout.close();//关闭输出流

缓冲字符流


字符缓冲流BufferedReader和BufferedWriter类:
字符缓冲输入流BufferedReader
publicBufferedReader(Reader in)
publicBufferedReader(Reader in,
int sz)//sz缓冲区长度
publicString readLine()throwsIOException
        //读取一行字符串,输入流结束时返回null

字符缓冲输出流BufferedWriter类
publicBufferedWriter(Writer out)
publicBufferedWriter(Writer out,
int sz)//sz缓冲区长度
publicvoid newLine()throwsIOException//写入换行符。

FileReader fin = new
FileReader(文件1);

BufferedReader bin = new
BufferedReader(fin);

//创建文件1的输出流对象

aline =
bin.readLine();

//读取一行字符串,输入流结束时返回null

bin.close();

fin.close();

字节流与字符流转换



InputStreamReader和OutputStreamWriter类:
InputStreamReader类   字节解码为字符

      read()       
读取单个字符。

     read(char[] cbuf,intoffset,
intlength)          
将字符读入数组中的某一部分。      

OutputStreamWrite类  字符编码为字节
    write(int c)          写入单个字符。

    write(String str,
int off,int len)          写入字符串的某一部分

文件操作类

构造方法
Public File(String pathname)
Public File(File parent , Stringname)
Public File(String parent ,String name)

例如:文件对象的创建

Filef1=new File(“myfile.txt”);

Filef2=new File(“\\mydir”,“myfile.txt”);

FilemyDir=newFile(“\\etc”);

Filef3=new File(myDir,“myfile.txt”);

例如:目录文件对象的创建

  File myDir=newFile(“\\myjava”);

Filedir=newFile(“.”,“”);

//dir文件对象,表示当前目录。

Filedir=newFile(“../”,“”);

//dir文件对象,表示当前目录上一级目录

FilemyDir=newFile(“”,“”);

//dir文件对象,表示所在盘符根目录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息