java输入与输出(I/O)(一):FileInputStream、FileOutputStream

来源:互联网 发布:系统之家手机数据恢复 编辑:程序博客网 时间:2024/05/18 07:39

       java输入输出是编程主题之一,对数据的读取以及文件的使用都是很常见的。Java的核心库java.io提供了全面的IO接口。包括:文件读写、标准设备输出等。Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。

对流的理解

       流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样。

Java流的分类

输入流: 程序可以从中读取数据的流。

输出流: 程序能向其中写入数据的流。

根据数据传输单位可分为:

字节流: 以字节为单位传输数据的流

字符流: 以字符为单位传输数据的流

按功能分:

节点流: 用于直接操作目标设备的流

过滤流: 是对一个已存在的流的链接和封装,通过对数据进行处理为程序提供功能强大、灵活的读写功能

       JDK所提供的所有流类位于java.io包中,都分别继承自以下四种抽象流类。InputStream、OutputStream、Reader、Writer。

说流之前还是先来看看文件吧,毕竟很多时候流操作的对象是文件。

1) 获取文件的基本属性方法:getName(),getParent(),getPath()来获取文件路径和文件名等等信息。

        File f=new File("d:\\","file.txt");                        System.out.println(f.getName());        System.out.println(f.getParent());        System.out.println(f.getPath());

用File类在d盘根目录下创建一个file.txt文件。分别获取该文件的名称、根目录、路由。

2)文件常见方法

isDirectory():判断文件对象是否是目录,返回布尔类型

exists():判断文件对象是否存在,返回布尔类型

createNewFile():创建文件

isFile():判断给定文件名是否为正常的文件,返回布尔

lastModified():返回表示此抽象路径名的文件的最后修改时间

length():测试文件长度

        File f1=new File("d:\\filetest","1.txt");        File f2=new File("d:\\filetest","2.txt");        File f3=new File("d:\\filetest","3.txt");        try{            f1.createNewFile();            f2.createNewFile();            f3.createNewFile();           }catch(Exception e) {            }

3)输入流的使用

    File f=new File("C:\\Users\\Administrator\\Desktop\\filetest\\file.txt");        FileInputStream fis = new FileInputStream(f);                           char ch;                                                                for (int i = 0; i < f.length(); i++) {                                      ch = (char) fis.read();            System.out.print(ch);        }        fis.close();

       分析上面的代码段:首先是在桌面创建了一个file.txt的文件 ,接着创建输入流对象fis,实现的功能是循环输出文件里面的字符。最后别忘了要用close()关闭输入流。另外需要注意的是使用文件流需要抛出异常。

4)文件输出流

File f=new File("C:\\Users\\Administrator\\Desktop\\filetest\\file.txt");        FileOutputStream fos=new FileOutputStream(f);        for(int i='a';i<='z';i++)        {            fos.write(i);            fos.write(' ');        }        fos.close();

       与文件输入流创建过程基本一致,上例通过创建文件输出流将a~z26个小写字母写进文件里面。

5) 用文件读写方式实现简单的复制功能。即从一个文件里面读,再写到另外一个文件。

        File f=new File("d:\\filetest\\file.txt");        File f1=new File("d:\\filetest\\file2.txt");        FileInputStream fis=new FileInputStream(f);        FileOutputStream fos=new FileOutputStream(f1);        byte[] b=new byte[(int)f.length()];        fis.read(b);        for(int i=0;i<f.length();i++)        {            fos.write(b[i]);        }        fis.close();        fos.close();

        以上代码中创建了一个字节型数组,数组大小就是已知文件长度。可以通过read操作一次性读取整个数组的所有数据,再用for循环写进已经创建好的文件中就可以。

1 0