IO流

来源:互联网 发布:js copy对象 编辑:程序博客网 时间:2024/06/03 23:37
//列出file的一些常用操作比如过滤,历遍等操作
//列出指定目录下的文件名
File dir
String[] filenames=dir.list();   list方法用于列出当前目录下的子目录和文件
for(String string :filenames)
{    
    System.out.println(string);
}
//如果要遍历子目录下的所有内容就需要构造File对象做递归操作,File提供了直接返回File对象的API
File[] files=dir.listFile();
for(File file:files)
{
    if(file.isDirectory){
        listDirectory(file);   //递归  listDirectory是自己写的方法;
    }else{
        system.out.println(file);
    }
    
    
}

//RandomAccessFile  java提供的对文件内容的访问,既可以读文件,也可以写文件
RandomAccessFile支持随机访问文件,可以访问文件的任意位置

1)java 文件模型
    在硬盘上的文件是byte byte byte存储的,是数据的集合
2)打开文件
有两种模式”rw“(读写)”r“(只读)
RandomAccessFile raf=new RandomAccessFile(file,”rw“)
文件指针,打开文件时指针在文件开头 pointer=0;
3)写方法
raf.write(int)--->只写一个字节(后8位),同时指针指向下一个位置,准备再次写入
4)读方法
int b=raf.read()--->只读一个字节
5)文件读写完成以后一定要关闭(oracle官方说明)

IO流(输入流,输出流)
字节流,字符流
1.字节流
1)inputStream,outputStream
    inpStream抽象了应用程序读取数据的方式
    outputStream抽象了应用程序写出数据的方式
2)EOF=End 读到-1就读到结尾
3)输入流的基本方法
int b=in.read();读取一个字节无符号填充到int低八位。-1是EOF
in.read(byte[] buf)  读取数据到字节数组buf中
in.read(byte[] buf,0,buf.length)放到buf这个数组中,从第0个位置开始放,最多放buf.length个,返回的是读到字节的个数
4)输出流的基本方法
out.write(int b)  写出一个字节到流,b的低8位
out.write(byte[] buf)  将buf字节数组写入到流
out.write(byte[] buf,0,buf.length)

5)FileInputStream继承inputStream--->具体实现了在文件上读取数据
6)FileOutputStream继承outputStream--->实现了在文件中写出byte数据的方法
7)DataOutputStream/DateInputStream--->对‘流’功能的一个扩展,可以更方便的读取int,long,字符等类型的数据
    DataOutputStream
    writeInt()/writeDouble()/writeUTF();
    String file="demo/dos.dat";
    DataOutputStream dos=new DataOutputStream(
        new FileOutputStream(File))
        
8)BufferInputStream/BufferoutputStream
这两个流类位IO提供了带缓冲区的操作,一般打开文件进行写入
或读取操作时,都会加上缓冲,这种流模式提高了IO的性能
从应用程序中把输入放入文件,相当于将一缸水倒入另一个缸中:
FileOutputStream--->write方法相当于一滴一滴地把水”转移过去“    批量字节读取最快
DataOutputStream--->writeXxx()方法会方便一些,相当于一瓢一瓢把水”转移“
BufferoutputStream--->writeXxx()更方便一些,相当于一瓢一瓢先放入桶中,再从桶倒入到缸中,性能提高了

2.字符流
1)编码问题
2)认识文本文件
java的文本(char)是16位无符号整数,是字符unicode编码(双字节编码)
文件是byte byte byte...的数据序列
文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为byte的存储

3)字符流(Rread Write)
字符的处理,一次处理一个字符
字符的底层任然是字节序列
字符流的基本实现
InputStreamReader  完成byte流解析为char流,按照编码解析
OutputStreamReader  提供char流到byte流,按照编码处理

FileRead/FileWrite   构造更简便

字符流过滤器
BufferedReader --->一次读一行
BufferedWrite/PrintWriter  --->一次写一行  不能识别换行,需单独写出newLine();

0 0
原创粉丝点击