返回顶部

IO流

1. IO流概述

IO流用来处理设备之间的数据传输,Java对数据的操作是通过流的方式,Java用于操作流的类都在IO包中,流按流向分:输入流,输出流;按数据类型分:字节流,字符流。

2. FileWriter 和 FileReader:

FileWriter 输出流向文件中写数据操作步骤:
a:使用FileWriter流关联文件(构造方法)
b:利用FileWriter的写方法写数据(writer方法)
c:利用FileWriter的刷新方法将数据从内存刷到硬盘上(fluah方法)
d:利用FileWriter的关流方法将释放占用的系统底层资源(close方法)

FileReader 输入流读文件的步骤:
A:创建输入流对象
B:调用输入流对象的读数据方法
C:释放资源

通过阅读源码可知,FileWriter的构造方法是调用其父类InputStreamReader的构造方法,并传入new出来的FileInputStream对象。
所以字符文件输出流 是转换流 转换 字节文件输出流 得到。
通过阅读源码可知,FileReader的构造方法是调用其父类OutputStreamWriter的构造方法,并传入new出来的FileOutputSream对象。
所以字符文件输入流 是转换流 转换 字节文件输入流 得到。

3. OutputStreamWriter 和 InputStreamReader

OutputStreamWriter:用于将一个字符流的输出对象(str)变为字节流的输出对象。或者说,其是转换流,把字节输出流(os)转换成字符输出流(w)。(以下代码为例)。

OutputStream os = System.out;
Writer w = new OutputStreamWriter(System.out);
String str =
"Hello World!";
w.write(str);

 InputStreamReader:用于将一个字符流的输入对象(consle输入的)变为字节流的输入对象(chs)。或者说,其是转换流,把字节输入流(is)转换成字符输入流(r)。(以下代码为例)。

InputStream is = System.in;
InputStreamReader r = new InputStreamReader(is);
char[] chs = new char[1024];
r.read(chs);
System.out.println(chs);

4. BufferedWriter和 BufferedReader

 阅读api和源码,可知BufferedWriter和BufferedReader这两个类,都有一个缓冲区。

Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)。例如, BufferedReader in = new BufferedReader(new FileReader("foo.in"));将缓冲指定文件的输入。如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。 

Writer 将其输出立即发送到底层字符或字节流。除非要求提示输出,否则建议用 BufferedWriter 包装所有其 write() 操作可能开销很高的 Writer(如 FileWriters 和 OutputStreamWriters)。例如,PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));将缓冲 PrintWriter 对文件的输出。如果没有缓冲,则每次调用 print() 方法会导致将字符转换为字节,然后立即写入到文件,而这是极其低效的。 

 demo:缓冲流一次读写一个字符数组

    public static void method(String srcFileName,String destFileName) throws IOException {
      
        BufferedReader br = new BufferedReader(new FileReader(srcFileName));
        BufferedWriter bw = new BufferedWriter(new FileWriter(destFileName));
        
        char[] chs = new char[1024];
        int len;
        while((len=br.read(chs))!=-1) {
            bw.write(chs,0,len);
        }
        
        bw.close();
        br.close();
    }

 

File类

构造方法

File(String pathname) :  将一个字符串路径封装成File对象
File(String parent,String child):  传入一个父级路径和子级路径
File(File parent,String child):  传入一个File类型的父级路径和子级路径

 创建和删除方法

boolean createNewFile():  指定路径不存在该文件时时创建文件
boolean mkdir():  当指定的单级文件夹不存在时创建文件夹
boolean mkdirs():  当指定的多级文件夹某一级文件夹不存在时,创建多级文件夹
boolean delete():  删除文件或者删除单级文件夹
注意:删除一个文件夹,这个文件夹下面不能有其他的文件和文件夹

 判断方法

boolean exists():  判断指定路径的文件或文件夹是否存在
boolean isAbsolute():  判断当前路路径是否是绝对路径
boolean isDirectory():  判断当前的目录是否存在(文件必须存在才能判断,不然返回false)
boolean isFile():  判断当前路径是否是一个文件(文件必须存在才能判断,不然返回false)
boolean isHidden():  判断当前路径是否是隐藏文件

获取功能和修改名字功能

File getAbsoluteFile():  获取文件的绝对路径,返回File对象
String getAbsolutePath():  获取文件的绝对路径,返回路径的字符串
String getParent():  获取当前路径的父级路径,以字符串形式返回该父级路径
File getParentFile():  获取当前路径的父级路径,以字File对象形式返回该父级路径
String getName():  获取文件或文件夹的名称
String getPath():  获取File对象中封装的路径
long lastModified():  以毫秒值返回最后修改时间
long length():  返回文件的字节数
boolean renameTo(File dest):   将当前File对象所指向的路径 修改为 指定File所指向的路径
String[] list():  以字符串数组的形式返回当前路径下所有的文件和文件夹的名称
File[] listFiles():  以File对象的形式返回当前路径下所有的文件和文件夹的名称
static File[] listRoots():  获取计算机中所有的盘符

 

 

posted @ 2017-09-03 01:18  jaden好青年  阅读(143)  评论(0编辑  收藏  举报