黑马程序员(六)IO流

来源:互联网 发布:大数据培训课程有哪些 编辑:程序博客网 时间:2024/06/05 23:59

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

IO流

作用:IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式
      
Java用于操作流的对象都在IO包中

分类:根据操作数据的不同分为字符流和字节流

根据数据传输方向的不同又可以分为输入流和输出流

File

构造方法

File(File parent, String child)根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。

File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。

File(String parent, String child)根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。

File(URI uri) 通过将给定的 file: /URI 转换为一个抽象路径名来创建一个新的 File 实例。


File方法

String getName():返回文件名或路径名(若是路径,返回最后一级子路径名)

String getPath():返回对象对应的路径名

File getAbsoluteFile():返回绝对路径

String getAbsolutePath():返回对象对应的绝对路径

String getParent():返回文件目录的上一级目录名

boolean renameTo(File newName):重命名此File对象对应的文件或目录,若重命名成功返回

true;

boolean exists():判断对象对应的文件或目录是否存在;

boolean canWrite():判断对象对应文件或目录是否可写;

boolean canRead():判断对象对应文件或目录是否可读;

boolean isFile():判断对象是文件,不是目录;

boolean isDirectory() 判断对象的文件是否是一个目录;

boolean isAbsolute()判断对象对应文件或目录是否为绝对路径名;

boolean createNewFile()当且仅当不存在,该方法创建一个该File对象所指定的新文件,创建成功返回true。

boolean delete():删除File对象所对应的文件或路径;

boolean mkdir()创建File对象所对应的目录,调用该方法的File对象必须对应路径,而不是文件

String[] list():列出File对象的所有子文件名和路径名。

File[] listFiles():列出File对象的所有子文件和路径。

static File[] listRoots():列出系统所有的根路径;

我的总结:创建File对象不是创建某个文件或文件夹,只是把地址封装成File对象

字节流

定义:在计算机中无论是文本、图片还是音频视频所有的文件都是以二进制形式存在,IO流中针对字节的输入输出提供了一些列的流,统称为字节流

字节流的顶级父类:

输入流:

                  InputStream(抽象类)

                        FileInputStream(常用基本流)

                       BufferedInputStream

                  输出流:

                        OutputStream(抽象类)

                       FileOutputStream(常用基本流)

                       BufferedOutputStream

InputStream的方法:

int read() 从输入流读取一个8位的字节,把它转换成0-255之间的整数,并返回这一个整数

int read(byte[] b)从输入流读取若干字节,把他们保存到参数b指定的字节数组中返回的整数表示读取字节数

int read(byte[] b,int off,int len)从输入流读取若干字节,把它们保存到参数b指定的字节数组中,off指定字节数组开始保存数据的起始下标,len表示读取的字节数目

void close()关闭此输入流并释放与该流关联的所有系统资源

OutputStream的方法:

void write (int b)想输出流写一个字节

void write (byte[] b)把参数b指定的字节数组的所有字节写到输出流

void write(byte[],int off,int len)将指定byte数组从偏移量off开始的len个字节开始写入输出流

void flush()刷新次输出流并强制写出所有缓冲的输出字节

void close()关闭此输出流并释放与此流相关的所有系统资源

字节流读取文件


字节缓冲流

作用:当通过流的方式拷贝文件时,为了提高效率可以定义一个字节数组作为缓冲区。在拷贝文件时,可以一次读取多个字节的数据,并保存在字节数组中,然后将字节数组中的数据一次性写入文件

字节缓冲流读取文件:


字符流

定义:输入流和输出流操作的数据是一个字符

                  输入流:

                        Reader(抽象类)

                              intread()

                              intread(char[] chs)

                        FileReader(常用基本流)

                        BufferedReader

                              String readLine()

                  输出流:

                       Writer(抽象类)

                              write(intch)

                              write(char[]chs,int index,int len)

                        FileWriter(常用基本流)

                        BufferedWriter

                              write(String line)

                              void newLine()

FileWriter写入数据

           步骤:

                 A:创建字符输出流对象

                 B:调用写入数据方法,并刷新缓冲区

                 C:释放资源

           代码体现:

                 FileWriterfw = new FileWriter("a.txt");

                 fw.write("hello,io");

                 fw.flush();

                 fw.close();

           问题?

                 A:创建字符输出流对象做了几件事情?

                  a:创建字符输出流对象

             b:调用对象的写入数据方法,并刷新缓冲区

                  c:释放资源

                 B:写数据完毕后,为什么要刷新?

  数据存在缓冲区,刷新才能写数据

                 C:为什么要close()?

             1:让流对象变成垃圾

                  2:通知系统去释放和文件相关的资源

                 D:flush()和close()的区别?

                 flush():只刷新缓冲区,流对象还可以继续使用。

                         close():先刷新缓冲区,在关闭流对象。流对象不可以继续被使用。

                 E:怎么实现数据换行?

                         给出换行符

                  windows:\r\n

                  linu:\n

                 mac:\r

                 F:怎么实现数据追加写入?

                 构造时用带两个参数的

                public FileWriter(String fileName,true){}

 

    FileReader读取数据

           步骤:

                 A:创建字符输入流对象

                 B:调用读取数据方法,并显示

                 C:释放资源

           代码体现:

                 FileReaderfr = new FileReader("a.txt");

                 //方式1

                 //一次读取一个字符

                 intch = 0;

                 while((ch=fr.read())!=-1)

                 {

                      System.out.print((char)ch);

                 }

                 //方式2

                 //一次读取一个字符数组

                 char[]chs = new char[1024];

                 intlen = 0;

                 while((len=fr.read(chs))!=-1)

                 {

                      System.out.print(newString(chs,0,len));

                 }

                 fr.close();

     到底使用谁?

            用记事本打开能读懂的,就用字符流。

            否则,用字节流。

            如果你根本就不知道,用字节流。

     复制文本文件

            9种方式:

                 字节流:

                       4种

                             基本流一次读写一个字节

                              基本流一次读写一个字节数组

                             高效流一次读写一个字节

                             高效流一次读写一个字节数组

                 字符流:

                       5种

                             基本流一次读写一个字符

                             基本流一次读写一个字符数组

                             高效流一次读写一个字符

                             高效流一次读写一个字符数组

                             高效流一次读写一个字符串

            代码体现:

                 

     复制二进制流数据:(图片,视频,音频等)

            字节流:

                       4种

                              基本流一次读写一个字节

                              基本流一次读写一个字节数组

                              高效流一次读写一个字节

                              高效流一次读写一个字节数组

 

            一般来说,我们选择使用高效流一次读写一个字节数组

            代码体现:

 

我的总结:用记事本打开能读懂的一般用高效字符流,否则用高效字节流


                            







0 0
原创粉丝点击