Java语言基础36-40--输入流和输出流

输入流和输出流

输入、输出流提供一条通道程序,可以使用这条通道读取源中的数据或把数据传送到目的地。

把输入流的指向称作,程序从指向源的输入流中读取源中的数据;

而输出流的指向是数据要去的一个目的地,程序通过向输出流中写入数据把数据传送到目的地。

 

1. File类

File对象主要用来获取文件本身的一些信息,不涉及对文件的读写操作。

创建一个File对象的构造方法有3个:

   File(String filename);

   File(String directoryPath,String filename);

   File(File f, String filename);

 

1.1. 文件的属性

File类的下列方法获取文件本身的一些信息。 

public String getName() 获取文件的名字。

public boolean canRead() 判断文件是否是可读的。

public boolean canWrite() 判断文件是否可被写入。

public boolean exits() 判断文件是否存在。

public long length() 获取文件的长度(单位是字节)。

public String getAbsolutePath() 获取文件的绝对路径。

public String getParent() 获取文件的父目录。

public boolean isFile() 判断文件是否是一个普通文件,而不是目录。

public boolean isDirectroy() 判断文件是否是一个目录。

public boolean isHidden() 判断文件是否是隐藏文件。

public long lastModified() 获取文件最后修改的时间。

 

1.2. 文件的创建与删除

当使用File类创建一个文件对象后,例如

        File file=new File("c:\\myletter","letter.txt");

◆ 如果c:\myletter目录中没有名字为letter.txt文件,文件对象file调用方法  public boolean createNewFile();可以在c:\myletter目录中建立一个名字为letter.txt的

◆ 文件对象调用方法  public boolean delete()可以删除当前文件,例如:

   file.delete();  

 

1.3. 目录

1.创建目录 public boolean mkdir()

2.列出目录中的文件 

◆ public String[] list() 用字符串形式返回目录下的全部文件。

◆ public File [] listFiles() 用File对象形式返回目录下的全部文件。 

◆ public String[] list(FilenameFilter obj) 用字符串形式返回目录下的指定类型的所有文件。

◆ public File [] listFiles(FilenameFilter obj) 用File对象形式返回目录下的指定类型所有文件。

   上述两方法的参数FilenameFilter是一个接口,该接口有一个方法:

    public boolean accept(File dir,String name); 

 

2. 字节流与字符流

java.io包提供了大量的流类,Java把InputStream抽象类的子类创建的流对象称作字节输入流、OutputStream抽象类的子类创建的流对象称作字节输出流,Java把Reader抽象类的子类创建的流对象称作字符输入流、Writer抽象类的子类创建的流对象称作字符输出流

针对不同的源或目的地,java.io包为程序提供了相应的输入流或输出流,这些输入、输出流绝大部分都是InputStream、OutputStream、Reader或Writer的子类。

 

2.1. InputStream类与OutputStream类

InputStream类提供的read方法以字节为单位顺序地读取源中的数据,只要不关闭流,每次调用read方法就顺序地读取源中的其余内容,直到源的末尾或输入流被关闭。

InputStream类有如下常用的方法。

    int read() 

    int read(byte b[ ]) 

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

    void close()

    long skip(long numBytes) 

OutputStream流以字节为单位顺序地写文件,只要不关闭流,每次调用write方法就顺序地向目的地写入内容,直到流被关闭。

OutputStream类有如下的常用的方法。

      void write(int n)

       void write(byte b[ ])

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

       void close()

 

2.2. Reader类与Writer类

1.Reader类提供的read方法以字符为单位顺序地读取源中的数据。

   int read():

   int read(char b[]):

   int read(char b[], int off, int len):

   void close():

   long skip(long numBytes):

2. Writer流以字符为单位顺序地写文件,每次调用write方法就顺序地向目的地写入内容。 Writer类有如下常用的方法。

    void write(int n):  向输出流写入一个字符。

    void write(char b[]):  向输出流写入一个字符数组。

    void write(char b[],int off,int length):  从给定字符数组中起始于偏移量off处取len个字符写到输出流。

    void close():  关闭输出流。

 

2.3. 关闭流

流都提供了关闭方法close(),尽管程序结束时会自动关闭所有打开的流,但是当程序使用完流后,显式地关闭任何打开的流仍是一个良好的习惯。

通过调用close()方法,可以保证操作系统把流缓冲区的内容写到它的目的地,即关闭输出流可以把该流所用的缓冲区的内容冲洗掉。   

 

3. 文件字节流

由于应用程序经常需要和文件打交道,所以InputStream专门提供了读写文件的子类:FileInputStream和FileOutputSream类。如果程序对文件的操作比较简单,比如只是顺序地读写文件,那么就可以使用FileInputStream和FileOutputSream类创建的流对文件进行读写操作。 

3.1. 文件字节输入流

1.创建文件字节输入流 

   FileInputStream类创建的对象被称作文件字节输入流。 

 ◆构造方法:

    FileInputStream(String name);

    FileInputStream(File file); 

 ◆读取一个名为hello.txt的文件,建立一个文件输入流对象,如下所示:

     try { FileInputStream in = new FileInputStream("hello.txt"); 

        }

       catch (IOException e) {

             System.out.println("File read error:"+e );

         } 

2.read方法以字节为单位读文件

    int read(); 

       int read(byte b[]);

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

3.2. 文件字节输出流

1.创建文件字节输出流 

   FileOutputStream类创建的对象被称作文件字节输出流。 

构造方法:

     FileOutputStream(String name)

     FileOutputStream(File file) 

2.以字节为单位写文件

   FileOutputStream流的目的地是文件,所以文件输出流调用write(byte b[ ])方法把字节写入到文件。

 

4. 文件字符流

字节输入流和输出流的read和write方法使用字节数组读写数据,即以字节为基本单位处理数据。因此,字节不能很好的操作Unicode字符,例如,一个汉字在文件中占用了2个字节,如果使用字节流,读取不当就可能会出现“乱码”现象。

1.FileReader和FileWriter用来创建文件字符输入、输出流,

构造方法:

   FileReader(String filename);

   FileReader(File filename);

   FileWriter (String filename); 

   FileWriter (File filename); 

2.字符输入流和输出流的read()和write()方法以字符为基本单位处理数据。 

 

5. 缓冲流

缓冲流增强了读写文件的能力,比如Student.txt是一个学生的名单,每个姓名占一行。如果我们想要读取名字,那么每次必须读取一行,使用FileReader流很难完成这样的任务,因为我们不清楚一行有多少字符,FileReader类没有提供读取一行的方法。

ps:个人理解,使用filereader无法分辨是否读了几行,貌似是读完的。在需要分行读的情况下就失效了。

1.BufferedReader和BufferedWriter类创建的对象称作缓冲输入、输出流。二者的源和目的地必须是字符输入流和字符输出流。  构造方法:

    BufferedReader(Reader in); 

    BufferedWriter (Writer out); 

2. BufferedReader和BufferedWriter类读写文件的方法:

   readLine() BufferedReader流读取文本行

   write(String s,int off,int len)BufferedWriter流把字符串s写到文件中

   newLine(); BufferedWriter流向文件写入一个回行符 

 

转载于:https://www.cnblogs.com/wack/p/10192010.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值