I/O流

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了I/O流相关的知识,希望对你有一定的参考价值。

I/O流

File用于表示文件(目录),也就是说程序员可以通过File类在程序中操作硬盘上的文件和目录。File类只用于表示文件(目录)的信息(名称、大小等),不能对文件的内容进行访问。

File f=new File(".");
System.out.println(f.getCanonicalPath());
f.getCanonicalPath()---获取当前路径

创件一个新的文件
File d=new File(f,"demo");
if(!d.exists()){
d.mkdir();
}

创件新的文件对象
File text=new File(d,"text");
if(!text.exists()){
text.createNewFile();
    }  

获取文件
File f=new File("c:");
    System.out.println(f.getCanonicalPath());
    f.getCanonicalPath();
    File[] files=f.listFiles();
    System.out.println(Arrays.toString(files))  

FileFilter类是对操作文件的过滤

File f=new File("src/test");
    File[] files=f.listFiles(new FileFilter() {
        @Override
        public boolean accept(File pathname) {
            return pathname.getName().endsWith(".java")&&pathname.isFile();
        }
    });
    for(File file:files){
        System.out.println(file.getName());
    }

listFiles()方法会将dir中每个文件交给accept()方法检测,如果返回true,就作为方法的返回结果元素

//FileInputStream 输入流
        FileInputStream f=new FileInputStream(new File("d:/hello.txt"));
        byte[] b=new byte[1024];//存储读取类容
        int n=0;
        //返回-1 read
        while((n=f.read(b))!=-1){
            System.out.println(n);
            System.out.println(new String(b));
        }
        f.close();  

BufferedInputStream && BufferedOutputStream 为 IO 操作提供了缓冲区,一般打开文件进行 写入戒读取操作时,都加上缓冲流,这种流模式是为了提高 IO(输入输出)的性能。

File f=new File("c:/wode.txt");
byte[] b=new byte[(int) f.length()];
BufferedInputStream bu=new BufferedInputStream(new FileInputStream(f));
int i=0;
    while((i=bu.read(b))!=-1){
    System.out.println(new String(b,"gbk"));
   } 

字符流:

字符流(Reader Writer) 字符的处理,一次处理一个字符(unicode 编码) 主要使用它们两个FileReader FileWriter
Reader类中两个常用类: FileReader:以字符流的形式读取文件,与FileInputStream用法基本一致。
BufferedReader:将流读入缓冲区,然后从缓冲区读取,并且提供了readLine()方法,可以从文本文件中整行的读取数据。

Writer类中两个常用类: FileWriter:以字符流的形式写入文件,与FileOutputStream用法基本一致。 BufferedWriter:将缓冲区输出到流。

实验1:写出文件:
    File file=new File("c:\\test.txt");
    FileWriter fw=new
FileWriter(file);//在这里加入参数true会实现对文件的续写
    String s="举头望明月,低头写代码";//\r\n为window下边的换行
    fw.write(s);
    fw.close();

实验2:读取文件
    File file=new File("c:\\test.txt");
    BufferedReader br=new BufferedReader(new FileReader(file));
    String strline =br.readLine();
    System.out.println(strline);
--但是我们发现,这样只读取了一行数据


File file=new File("c:\\test.txt");
    FileReader fr=new FileReader(file);
    int ch=0;
    while((ch=fr.read())!=-1){
        System.out.print((char)ch);
    }

对象序列化

简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来

对象序列化,就是将 Object 转换为 byte 序列,反之叫对象的反序列化。 1) 序列化流(ObjectOutputStream), 是过滤流

 ObjectOutputStream writeObject(Object)    序列化对象
 ObjectInputStream readObject()        对象的反序列化
 Users u=new Users();
 u.setUserId(1);
 u.setUserName("zhangsan");
 u.setUserPwd("admin");
 File file=new File("c://wode.txt");
 FileOutputStream fo=new FileOutputStream(file);
 ObjectOutputStream ops=new ObjectOutputStream(fo);
 ops.writeObject(u);


读取:
    File file=new File("c://wode.txt");
    FileInputStream fis=new FileInputStream(file);
    ObjectInputStream ois=new ObjectInputStream(fis);
    Users u=(Users) ois.readObject();
    System.out.println(u.getUserId()+" "+u.getUserName());  

2)序列化接口(Serializable) 对象必须实现“序列化接口”才能进行序列化,否则将出现丌能序列化的异常! Serializable 是一个空的接口,没有任何方法,仅作为序列化的一个标识

Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。Java序列化API提供一种处理对象序列化的标准机制。在这里你能学到如何序列化一个对象,什么时候需要序列化以及Java序列化的算法,我们用一个实例来示范序列化以后的字节是如何描述一个对象的信息的。

以上是关于I/O流的主要内容,如果未能解决你的问题,请参考以下文章

Java I/O流详解与应用

I/O流

笔记:I/O流-文件操作

Java中的I/O流

笔记:I/O流-字符集

I/O多路复用是什么?(I/O multiplexing)