Java中的字节流和字符流

1. IO概述

我们把数据的传输,可以看做是一种数据的流动,按照流动的方向,以内存为基准,分为输入input输出output ,即流向内存是输入流,流出内存的输出流。

Java中I/O操作主要是指使用java.io包下的内容,进行输入、输出操作。输入也叫做读取数据,输出也叫做作写出(写入)数据。

1.1 IO的分类

根据数据的流向分为:输入流输出流

  • 输入流 :把数据从其他设备上读取到内存中的流。
  • 输出流 :把数据从内存 中写出到其他设备上的流。

根据数据的类型分为:字节流字符流

  • 字节流 :以字节为单位,读写数据的流。
  • 字符流 :以字符为单位,读写数据的流。

1.2 顶级父类

title

2. 字节流

一切文件数据(文本、图片、视频等)在存储时,都是以二进制数字的形式保存,都一个一个的字节,那么传输时一样如此。所以,字节流可以传输任意文件数据。在操作流的时候,我们要时刻明确,无论使用什么样的流对象,底层传输的始终为二进制数据。

2.1 字节输出流[OutputStream]

java.io.OutputStream抽象类是表示字节输出流的所有类的超类,将指定的字节信息写出到目的地。它定义了字节输出流的基本共性功能方法。

  • public void close() :关闭此输出流并释放与此流相关联的任何系统资源。
  • public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。
  • public void write(byte[] b):将 b.length字节从指定的字节数组写入此输出流。
  • public void write(byte[] b, int off, int len) :从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。
  • public abstract void write(int b) :将指定的字节输出流。

Tips: close方法,当完成流的操作时,必须调用此方法,释放系统资源。

2.2 FileOutputStream类

OutputStream有很多子类,我们从最简单的一个子类开始。
java.io.FileOutputStream类是文件输出流,用于将数据写出到文件。

构造方法

  • public FileOutputStream(File file):创建文件输出流以写入由指定的 File对象表示的文件。
  • public FileOutputStream(String name): 创建文件输出流以指定的名称路径写入文件。

当你创建一个流对象时,必须传入一个文件路径。该路径下,如果没有这个文件,会创建该文件。如果有这个文件,会清空这个文件的数据。

  • 构造举例,代码如下:
    public class FileOutPutDemo01 {
      public static void main(String[] args) throws IOException {
          // 使用File对象创建流对象
          File file = new File("D:\\IDEA_WorkSpace\\Demo\\Demo5_6\\a.txt");
          FileOutputStream fos = new FileOutputStream(file);
          // 使用文件名称路径创建流对象
          FileOutputStream fos2 = new FileOutputStream("D:\\IDEA_WorkSpace\\Demo\\Demo5_6\\b.txt");
      }
    }
    

    写出字节数据

  1. 写出字节write(int b) 方法,每次可以写出一个字节数据,代码使用演示:
    public class FOSWrite {
     public static void main(String[] args) throws IOException {
         FileOutputStream fos = new FileOutputStream("D:\\IDEA_WorkSpace\\Demo" +
                 "\\Demo5_6\\fos.txt");
         // 写入数据
         fos.write(97);
         fos.write(98);
         fos.write(99);
         // 关闭
         fos.close();
     }
    }
    // result:
    abc
    

Tips:

1. 虽然参数为int类型四个字节,但是只会保留一个字节的信息写出。
2. 流操作完毕后,必须释放系统资源,调用close方法,千万记得。
  1. 写出字节数组write(byte[] b),每次可以写出数组中的数据,代码使用演示:

    public class FOSWriteDemo02 {
     public static void main(String[] args) throws IOException {
         FileOutputStream fos = new FileOutputStream("D:\\IDEA_WorkSpace\\Demo" +
                 "\\Demo5_6\\fos2.txt");
         // 将字符串转换为字节数组
         byte[] bytes = "测试写入".getBytes();
         // 写出字节数组数据
         fos.write(bytes); // 测试写入
         fos.close();
     }
    }
    
  2. 写出指定长度字节数组write(byte[] b, int off, int len) ,每次写出从off索引开始,len个字节,代码使用演示:

    public class FosWriteDemo03 {
     public static void main(String[] args) throws IOException {
         FileOutputStream fos = new FileOutputStream("D:\\IDEA_WorkSpace\\Demo\\Demo5_6\\fos3.txt");
         byte[] bytes = "abcdef".getBytes(); // 字符串转换为字节数组
         fos.write(bytes,2,2); // result:cd
         fos.close();
     }
    }
    

数据追加续写

  • public FileOutputStream(File file, boolean append): 创建文件输出流以写入由指定的 File对象表示的文件。
  • public FileOutputStream(String name, boolean append): 创建文件输出流以指定的名称写入文件。

以上两个构造方法,参数中都需要传入一个boolean类型的值,true表示追加数据,false表示清空原有数据。代码示例如下:

public class FOSAppendWrite {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos = new FileOutputStream("D:\\IDEA_WorkSpace\\Demo" +
                "\\Demo5_6\\fos2.txt",true); // 创建流对象,设置数据追加
        fos.write(",测试追加。".getBytes()); // result = 测试写入,测试追加。
        fos.close();
    }
}

写出换行

Windows中换行符号是\r\n。以下代码示例具体使用:

public class FOSWriteDemo04 {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos = new FileOutputStream("D:\\IDEA_WorkSpace\\Demo\\Demo5_6\\c.txt");
        byte[] words = {97,98,99,100,101}; // abcde
        for (byte i:words){
            fos.write(i);
            fos.write("\r\n".getBytes()); // 写出一个换行,将换行符号转为数组写出
        }
        fos.close();
    }
}

/*
result:
a
b
c
d
e
 */

Tips:

  • 回车符\r和换行符\n
    • 回车符:回到一行的开头(return)。
    • 换行符:下一行(newline)。
  • 系统中的换行:
    • Windows系统里,每行结尾是 回车+换行 ,即\r\n
    • Unix系统里,每行结尾只有 换行 ,即\n
    • Mac系统里,每行结尾是 回车 ,即\r。从 Mac OS X开始与Linux统一。

2.3 字节输入流[InputStream]

java.io.InputStream抽象类是表示字节输入流的所有类的超类,可以读取字节信息到内存中。它定义了字节输入流的基本共性功能方法。

  • public void close() :关闭此输入流并释放与此流相关联的任何系统资源。
  • public abstract int read(): 从输入流读取数据的下一个字节。
  • public int read(byte[] b): 从输入流中读取一些字节数,并将它们存储到字节数组 b中 。

2.4 FileInputStream类

java.io.FileInputStream类是文件输入流,从文件中读取字节。

构造方法

  • FileInputStream(File file): 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。
  • FileInputStream(String name): 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。

当你创建一个流对象时,必须传入一个文件路径。该路径下,如果没有该文件,会抛出FileNotFoundException

  • 代码示例如下:
    public class FileInputStreamDemo01 {
      public static void main(String[] args) throws IOException {
          // 使用File对象创建流对象
          FileInputStream fis = new FileInputStream(new File("Demo5_6\\fos2.txt"));
          // 使用文件名创建流对象
          FileInputStream fis2 = new FileInputStream("Demo5_6\\fos.txt");
      }
    }
    

读取字节数据

  1. 读取字节read方法,每次可以读取一个字节的数据,提升为int类型,读取到文件末尾,返回-1,代码演示如下:
    public class FISRead {
     public static void main(String[] args) throws IOException {
         FileOutputStream fos = new FileOutputStream("D:\\IDEA_WorkSpace\\Demo\\Demo5_6\\read.txt");
         byte[] bytes = {97,98,99,100,101};
         for (byte b:bytes){
             fos.write(b);
             fos.write("\n".getBytes());
         }
         fos.close();
         // 创建字节输入流对象,指向文件
         FileInputStream fis = new FileInputStream("D:\\IDEA_WorkSpace\\Demo\\Demo5_6\\read.txt");
     int b;
         while ((b = fis.read())!=-1){ // 判断从数据中读取的值不等于-1
             System.out.println((char)b); // byte字节型转换为char字符型
         }
         fis.close();
     }
    }
    

Tips:虽然读取了一个字节,但是会自动提示为int类型。操作完毕后,一定要close()。

  1. 使用字节数组读取read(byte[] b),每次读取b的长度个字节到数组中,返回读取到的有效字节个数,读取到末尾时,返回-1 ,代码使用演示:
    public class FISReadDemo02 {
     public static void main(String[] args) throws IOException {
         FileInputStream fis = new FileInputStream("D:\\IDEA_WorkSpace\\Demo\\Demo5_6\\read.txt");
         int len; // 定义变量,作为有效个数
         byte[] bytes = new byte[2]; // 定义字节数组,作为放字节数据的容器,存储2个字节
         while ((len = fis.read(bytes))!=-1){ // 这样每次可以读取2个字节
             System.out.println(new String(bytes,0,len)); // 每次读取后,将数组变成字符串打印
         }
         fis.close();
     }
    }
    

2.5 字节流练习:图片复制

复制原理图解

title

代码示例

public class CopyImg {
    public static void main(String[] args) throws IOException {
        // 创建流对象,指定数据源
        FileInputStream fis = new FileInputStream("C:\\Users\\14908\\Desktop\\Java\\img\\2_copy.jpg");
        // 指定目的地
        FileOutputStream fos = new FileOutputStream("D:\\IDEA_WorkSpace\\Demo" +
                "\\Demo5_6\\copy.jpg");
        // 定义长度
        int len;
        // 定义数组
        byte[] b = new byte[1024];
        // 循环读取
        while ((len = fis.read(b))!=-1){
            fos.write(b,0,len);
        }
        fos.close();
        fis.close();
    }
}

Tips:
流的关闭原则:先开后关,后开先关。

3. 字符流

当使用字节流读取文本文件时,可能会有一个小问题。就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储。所以Java提供一些字符流类,以字符为单位读写数据,专门用于处理文本文件。

3.1 字符输入流[Reader]

java.io.Reader抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中。它定义了字符输入流的基本共性功能方法。

  • public void close() :关闭此流并释放与此流相关联的任何系统资源。
  • public int read(): 从输入流读取一个字符。
  • public int read(char[] cbuf): 从输入流中读取一些字符,并将它们存储到字符数组 cbuf中 。

3.2 FileReader类

java.io.FileReader类是读取字符文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。

Tips:

1. 字符编码:字节与字符的对应规则。Windows系统的中文编码默认是GBK编码表(IDEA中是UTF-8)
2. 字节缓冲区:一个字节数组,用来临时存储字节数据

构造方法

FileReader(File file): 创建一个新的 FileReader ,给定要读取的File对象。
FileReader(String fileName): 创建一个新的 FileReader ,给定要读取的文件的名称。

代码示例如下:

public class FileReaderDemo throws IOException{
    public static void main(String[] args){
        // 使用File对象创建流对象
        FileReader fr = new FileReader(new File("Demo5_6\\a.txt"));
        // 使用文件名称创建流对象
        FileReader fr2 = new FileReader("Demo5_6\\a.txt");
    }
}

读取字符数据

  1. 读取字符read方法,每次可以读取一个字符的数据,提升为int类型,读取到文件末尾,返回-1,循环读取,代码演示如下:

    public class FRReadDemo01 {
     public static void main(String[] args) throws IOException {
         FileReader fr = new FileReader("D:\\IDEA_WorkSpace\\Demo\\Demo5_6\\d.txt");
         int w;
         while ((w = fr.read())!=-1){
             System.out.print((char)w);
         }
         fr.close();
     }
    }
    

    Tips:虽然读取了一个字符,但是会自动提升为int类型。

  2. 使用字符数组读取read(char[] cbuf),每次读取b的长度个字符到数组中,返回读取到的有效字符个数,读取到末尾时,返回-1 ,代码演示如下:

    public class FRReadDemo02 {
     public static void main(String[] args) throws IOException {
         FileReader fr = new FileReader("D:\\IDEA_WorkSpace\\Demo\\Demo5_6\\d.txt");
         int len;
         char[] cbuf = new char[2]; // 定义字符数组,作为放字符数据的容器
         while ((len = fr.read(cbuf))!=-1){
             System.out.print(new String(cbuf,0,len)); // 转换为字符串输出
         }
         fr.close();
     }
    }
    

3.3 字符输出流[Writer]

java.io.Writer抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。它定义了字节输出流的基本共性功能方法。

  • void write(int c) 写入单个字符。
  • void write(char[] cbuf)写入字符数组。
  • abstract void write(char[] cbuf, int off, int len)写入字符数组的某一部分,off数组的开始索引,len写的字符个数。
  • void write(String str)写入字符串。
  • void write(String str, int off, int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个数。
  • void flush()刷新该流的缓冲。
  • void close() 关闭此流,但要先刷新它。

3.4 FileWriter类

java.io.FileWriter类是写出字符到文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。

构造方法

  • FileWriter(File file): 创建一个新的 FileWriter,给定要读取的File对象。
  • FileWriter(String fileName): 创建一个新的 FileWriter,给定要读取的文件的名称。

基本写出数据

写出字符write(int b) 方法,每次可以写出一个字符数据,代码示例如下:

public class FWWrite {
    public static void main(String[] args) throws IOException {
        FileWriter fw = new FileWriter("D:\\IDEA_WorkSpace\\Demo\\Demo5_6\\fw.txt");
        // 写出数据
        fw.write(97);
        fw.write('b');
        fw.write('c');
        fw.write(30000);
        fw.close();
        // result: abc田
    }
}

Tips:

  1. 虽然参数为int类型四个字节,但是只会保留一个字符的信息写出。
  2. 未调用close方法,数据只是保存到了缓冲区,并未写出到文件中。

关闭和刷新

因为内置缓冲区的原因,如果不关闭输出流,无法写出字符到文件中。但是关闭的流对象,是无法继续写出数据的。如果我们既想写出数据,又想继续使用流,就需要flush 方法了。

  • flush :刷新缓冲区,流对象可以继续使用。
  • close:先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。

代码示例:

public class FWWriteDemo02 {
    public static void main(String[] args) throws IOException {
        FileWriter fw = new FileWriter("D:\\IDEA_WorkSpace\\Demo\\Demo5_6\\fw02.txt");
        // 写出数据,通过flush
        fw.write('刷');
        fw.flush();
        fw.write('新');
        fw.flush();
        // 写出数据,通过close
        fw.write('关');
        fw.close();
        fw.write('闭'); // [报错] java.io.IOException: Stream closed
        fw.close();
    }
}

Tips:即使使用了flush方法写出了数据,操作到最后还是要调用close方法,释放系统资源。

写出其他数据

  1. 写出字符数组write(char[] cbuf)write(char[] cbuf, int off, int len) ,每次可以写出字符数组中的数据,用法类似FileOutputStream,实例如下:
    public class FWCharWrite {
     public static void main(String[] args) throws IOException {
         FileWriter fw = new FileWriter("D:\\IDEA_WorkSpace\\Demo\\Demo5_6\\fw03.txt");
         char[] chars = "测试写出字符数组".toCharArray(); // 将字符串转换为字符数组
         fw.write(chars); // 测试写出字符数组
         fw.write(chars,4,2); // 写出从索引2开始的2个字节,即"字符"2字
         fw.close();
     }
    }                                                              
    
  2. 写出字符串write(String str)write(String str, int off, int len) ,每次可以写出字符串中的数据,更为方便,示例如下:

    public class FWWriteString {
     public static void main(String[] args) throws IOException {
         FileWriter fw = new FileWriter("D:\\IDEA_WorkSpace\\Demo\\Demo5_6\\fw04.txt");
         fw.write("测试字符串写出"); // 测试字符串写出
         fw.write("测试写出指定字符",2,2); // 写出
         fw.close();
     }
    }
    
  3. 续写和换行:操作类似于FileOutputStream。

    public class FWWriteString {
     public static void main(String[] args) throws IOException {
         FileWriter fw = new FileWriter("D:\\IDEA_WorkSpace\\Demo\\Demo5_6\\fw04.txt");
         fw.write("测试字符串写出"); // 测试字符串写出
         fw.write("\r\n"); // 写出换行符
         fw.write("测试写出指定字符",2,2); // 写出
         fw.close();
     }
    }
    

4. IO异常的处理

JDK7前的处理

之前的练习中,一直把异常直接抛出,实际开发中建议使用try...catch...finally 代码块,处理异常部分,代码示例如下:

public class HandleException01 {
    public static void main(String[] args) {
        // 声明一个Fw对象,指向空
        FileWriter fw = null;
        try {
            // 创建一个流对象,将fw指向该对象
            fw = new FileWriter("D:\\IDEA_WorkSpace\\Demo\\Demo5_6\\fw05.txt");
            // 写出数据
            fw.write("异常的处理测试");
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            try{
                if (fw != null){
                    fw.close();
                }
            }catch (IOException e){
                e.printStackTrace();
            }
        }

    }
}

JDK7的处理

可以使用JDK7优化后的try-with-resource 语句,该语句确保了每个资源在语句结束时关闭。所谓的资源(resource)是指在程序完成后,必须关闭的对象。
格式:

try(创建流对象语句,如多个,使用';'隔开){
    // 读写语句
}catch(IOException e){
    e.printStackTrace();
}

代码示例:

public class FWJDK7Dispose {
    public static void main(String[] args) {
        try(FileWriter fw = new FileWriter("D:\\IDEA_WorkSpace\\Demo\\Demo5_6\\fw06.txt");){
            fw.write("测试JDK7后优化的try...catch");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

JDK9的改进

JDK9中try-with-resource 的改进,对于引入对象的方式,支持的更加简洁。被引入的对象,同样可以自动关闭,无需手动close,格式如下。
改进前格式:

// 被final修饰的对象
final Resource resource1 = new Resource("resource1");
// 普通对象
Resource resource2 = new Resource("resource2");
// 引入方式:创建新的变量保存
try (Resource r1 = resource1;
     Resource r2 = resource2) {
     // 使用对象
}

改进后的格式:

// 被final修饰的对象
final Resource resource1 = new Resource("resource1");
// 普通对象
Resource resource2 = new Resource("resource2");

// 引入方式:直接引入
try (resource1; resource2) {
     // 使用对象
}

改进后的代码实例:

public class TryDemo {
    public static void main(String[] args) throws IOException{
        final FileReader fr = new FileReader("D:\\IDEA_WorkSpace\\Demo\\Demo5_6\\read.txt");
        FileWriter fw = new FileWriter("D:\\IDEA_WorkSpace\\Demo\\Demo5_6\\out.txt");
        try(fr;fw){
            int b;
            while ((b = fr.read())!=-1){
                fw.write(b);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

5. 属性集

5.1 概述

java.util.Properties 继承于Hashtable ,来表示一个持久的属性集。它使用键值结构存储数据,每个键及其对应值都是一个字符串。该类也被许多Java类使用,比如获取系统属性时,System.getProperties 方法就是返回一个Properties对象。

5.2 Properties类

构造方法

public Properties() :创建一个空的属性列表。

基本的存储方法

  • public Object setProperty(String key, String value) : 保存一对属性。
  • public String getProperty(String key) :使用此属性列表中指定的键搜索属性值,返回搜索到的值
  • public Set<String> stringPropertyNames() :返回所有键名称的集合。
    public class ProDemo {
      public static void main(String[] args) {
          // 创建属性集对象
          Properties pt = new Properties();
          // 添加键值对元素
          pt.setProperty("小梦","168");
          pt.setProperty("小明","175");
          pt.setProperty("小张","178");
          // 打印属性集对象
          System.out.println(pt);
          // 通过键获取值
          Set<String> set = pt.stringPropertyNames(); // 获取所以键,放入集合中
          for (String key:set){
              System.out.println(key+"-->"+pt.getProperty(key));
          }
      }
    }
    // result
    {小明=175, 小张=178, 小梦=168}
    小明-->175
    小张-->178
    小梦-->168
    

store方法

Properties集合中的方法store;用于把集合中的临时数据,持久化写入到硬盘中存储。

  • 构造方法
    • void store(OutPutStream out,String comments); 字节输出流,不能写入中文
    • void store(Write write,String comments); 字符输出流,可以写中文
    • String comments: 注释,用来解释说明保存的文件是做什么的,不能中文注释

代码示例:

public class ProDemo02 {
    public static void main(String[] args) throws IOException {
        // 1. 创建Properties集合对象,添加数据
        Properties pro = new Properties();
        pro.setProperty("小明","177");
        pro.setProperty("小立","181");
        pro.setProperty("小化","173");
        // 2. 创建字节输出流/字符输出流对象,绑定输出目的地。
        FileWriter fw = new FileWriter("D:\\IDEA_WorkSpace\\Demo\\Demo5_6\\prop.txt");
        // 3. 使用Properties集合中的方法store,把集合中的临时数据,写入到硬盘中
        pro.store(fw,"save data");
        // 4. 释放资源
        fw.close();
        /*
        prop.txt
            #save data
            #Tue May 07 20:47:14 CST 2019
            小明=177
            小立=181
            小化=173
         */
    }
}

load方法

可以使用Properties集合中的方法load,把硬盘中保存的文件(键值对形式的),读取到集合中使用。

  • 构造方法

    • void load(InputStream inStream); 字节输入流,不能读取含有中文的键值对
    • void load(Reader reader); 字符输入流,可以读取中文
  • 注意

    1. 存储键值对的文件中,键与值的默认连接符号可以使用=,空格(其他符号),一般使用=
    2. 存储键值对的文件中,可以使用# 做注释,注释的内容不会被读取
    3. 存储键值对的文件中,键值默认都是字符串,不需要再加引号

代码示例:

public class ProLoadMethod {
    public static void main(String[] args) throws IOException {
        // 1. 创建Properties集合对象
        Properties pro = new Properties();
        // 2. 使用Properties集合对象中的load方法来读取保存键值对的文件
        pro.load(new FileReader("D:\\IDEA_WorkSpace\\Demo\\Demo5_6\\prop.txt"));
        // 3.遍历Properties集合
        Set<String> set = pro.stringPropertyNames();
        for (String key:set){
            System.out.println(key + "-->" + pro.getProperty(key));
        }
    }
}

今日总结:

  1. IO的概述
  2. IO的分类:根据数据流向:输入流和输出流,根据数据类型:字节流和字符流。
  3. 字节输出流OutPutStream类的子类FileFileOutputStream类构造方法创建流对象的方式
  4. FileFileOutputStream类的基本方法write的三种使用方式
  5. 数据的追加续写:FileFileOutputStream类的第二个参数布尔值,true追加,false清空。
  6. 关于换行符的写入
  7. 字节输入流InputStream类的子类FileInputStream
  8. FileInputStream类构造方法创建流对象的方式
  9. FileInputStream类的基本方法read的2种使用方式,读取字节和读取字节数组。
  10. 字符输入流Reader类的子类FileReader
  11. FileReader类构造方法创建流对象的方式
  12. 读取字符数据的两种方式,读取字符和读取字符数据
  13. 字符输出流Write类的子类FileWrite类构造方法创建流对象的方式
  14. 使用write写出数据的方法:写出字符、写出字符数组写出字符串
  15. 关闭close()和刷新flush方法
  16. IO异常处理的优化方案
  17. 属性集的概述和使用
  18. Properties类的构造方法创建流对象
  19. 基本存储方法:setProperty(),getProperty(),stringPropertyNames()
  20. 读取load()和写入store()方法

 上一篇
缓冲流、转换流、序列化流、打印流 缓冲流、转换流、序列化流、打印流
1. 缓冲流缓冲流,也叫高效流,是对4个基本的FileXxx 流的增强,所以也是4个流,按照数据类型分类: 字节缓冲流:BufferedInputStream,BufferedOutputStream 字符缓冲流:BufferedRea
2019-05-10
下一篇 
Java中File类和递归 Java中File类和递归
1. File类java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。 1.1 构造方法 public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名
2019-05-05
  目录