File
1.File类的概述和构造方法
file:是对文件和路径名的抽象表示
-
文件和目录是可以通过File封装成对象的
-
对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。他可以是存在的,也可以是不存在的。将来要通过具体的操作把这个路径名转化为具体存在的
-
方法名 说明 File(String pathname) 通过给定的路径名字符串转化为抽象路径名来创建新的File实例 File(String parent,String child) 从父路径名字符串和子路径名字符串创建新的File实例 File(File parent,String child) 从父抽象路径名和子路径名字符串创建新的File实例 -
File f1=new File("E:/test/java.txt"); System.out.println(f1);//输出 E:\test\java.txt File f2=new File("E:/test","java.txt"); System.out.println(f2);//输出 E:\test\java.txt File f3=new File("E:/test"); File f4=new File(f3,"java.txt"); System.out.println(f4);//输出 E:\test\java.txt
-
2.File的创建功能
方法名 | 说明 |
---|---|
public boolean createNewFile() | 当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新文件 |
public boolean mkdir() | 创建由此抽象路径名命名的目录 |
public boolean mkdirs() | 创建由抽象路径名命名的目录,包括任何必须但不存在的父目录 |
-
File f1=new File("G:/test/java.txt"); f1.createNewFile(); File f2=new File("G:/test1"); f2.mkdir(); File f3=new File("G:/test2/test3"); f3.mkdirs();
-
如果目录或者文件开始就存在 则会返回false
3.File的判断和获取功能
方法名 | 说明 |
---|---|
public boolean isDirectory() | 测试此抽象路径名表示的File是否是目录 |
public boolean isFile() | 测试此抽象路径名表示的File是否是文件 |
public boolean exists() | 测试此抽象路劲名表示的File是否存在 |
public String getAbsolutePath() | 返回此抽象路径名的绝对路径名字符串 |
public String getPath() | 将此抽象路径名转化为路径名字符串 |
public String getName() | 返回此抽象路径名表示的文件或目录的名称 |
public String[] list() | 返回此抽象路径名表示的文件或目录的名称字符串数组 |
public File[] listFiles() | 返回此抽象路径名表示的文件或目录的File数组 |
File f1=new File("G:/test/java.txt");
System.out.println(f1.isDirectory());//flse
System.out.println(f1.isFile());//true
System.out.println(f1.exists());//true
System.out.println(f1.getAbsoluteFile());//G:\test\java.txt
System.out.println(f1.getPath());//G:\test\java.txt
System.out.println(f1.getName());//java.txt
File f2=new File("G:/test2");
String[] list1 = f2.list();
for (String str:list1) {
System.out.println(str);
}//test3 test4
File[] files = f2.listFiles();
for (File f:files) {
System.out.println(f.getName());//test3 test4 test5.txt
f(!f.isDirectory()){
System.out.println(f.getName());//test5.txt
}
}
##4.File删除
-
方法名 说明 public boolean delete() 删除此抽象路径名表示的文件或目录 -
File f3=new File("G:/test2"); f3.delete();//true
IO流
-
按照数据流向分 输入流 读数据 输出流 写数据 -
按照数据类型分 字节流 字节输入流,字节输出流 字符流 字符输入流,字符输出流 -
一般是按照数据类型来分
-
如果数据通过Windows自带的记事本软件打开,我们还可以读懂里面的内容就使用字符流,否则使用字节流,如果你不知道使用哪种类型的流,就是用字节流
1.字节流
字节流抽象基类
- InputStream:这个抽象类是字节输入流的所有类的超类
- OutputSteam:这个抽象类是字节输出流的所有类的超类
- 子类名的特点:子类名称都是以其父类名称作为子类名的后缀
字节输出流
-
创建方法
-
方法 说明 FileOutputStream(String name) 创建文件输出流以指定的名称写入文件 FileOutputStream(String name, boolean append)
创建文件输出流以指定的名称写入文件,append 如果是true,则实现追加写入 -
字节输出流写数据的步骤:
- 创建字节输出流的对象,调用系统功能创建文件,创建字节输出流对象,让字节输出流指向文件
- 调用字节输出流写数据的方法
- 释放资源
-
字节输出流写数据的方法
-
方法 说明 void``write(int b)
将指定的字节写入此文件输出流。 void``write(byte[] b)
将 b.length
个字节从指定的字节数组写入此文件输出流。void``write(byte[] b, int off, int len)
将 len
字节从位于偏移量off
的指定字节数组写入此文件输出流。 -
FileOutputStream fos=new FileOutputStream("C:/IdeaProjects/TEST/fos.txt"); int a=97; byte[] by1={'a','v','b'}; byte[] by2={'1','2','3'}; fos.write(a);//a fos.write(by2);//avb fos.write(by2,1,2);//23 fos.close();
字节输入流
-
构造方法:
-
方法 说明 FileInputStream(String name)
通过打开与实际文件的连接来创建一个 FileInputStream
,该文件由文件系统中的路径名name
命名。 -
步骤:
- 创建字节输入流对象
- 调用字节输入流对象的读数据的方法
- 释放资源
-
读数据的方法:
-
方法 说明 int``read()
从该输入流读取一个字节的数据。 int``read(byte[] b)
从该输入流读取最多 b.length
个字节的数据为字节数组。int``read(byte[] b, int off, int len)
从该输入流读取最多 len
字节的数据为字节数组int``available()
返回从此输入流中可以读取(或跳过)的剩余字节数的估计值,而不会被下一次调用此输入流的方法阻塞 -
FileInputStream fis = new FileInputStream("C:/IdeaProjects/TEST/fos.txt"); FileOutputStream fos = new FileOutputStream("C:/IdeaProjects/TEST/fis.txt"); int len=fis.available(); System.out.println(len); byte [] by=new byte[len]; fis.read(by); fos.write(by); fis.close(); fos.close();
字节缓冲流
字节缓冲输出流
-
BufferedOutputStream 是OutputStream的子类
-
该类实现缓冲输出流。 通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用。
-
构造方法:
-
方法 说明 BufferedOutputStream(OutputStream out)
创建一个 BufferedOutputStream
并保存其参数,输出流out ,供以后使用。
字节缓冲输入流
-
BufferedInputStream 是InputStream的子类
-
将创建一个内部缓冲区数组。 当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次有多个字节
-
构造方法:
-
方法 说明 BufferedInputStream(InputStream out)
创建一个 BufferedInputStream
并保存其参数,输入流in
,供以后使用。
2.字符流
-
由于字节流处理中文不是很方便,所以java提供字符流
-
字符流=字节流+编码表
-
中文在存储时,无论选择哪种编码(UTF-8,GBK)第一个字节都是负数
编码表
-
计算机上存储的信息都是用二进制存储
-
按照某种规则,将字符存储到计算机中,称为编码,反之,将存储在计算机中的二进制按照某种规则解析出来,成为解码。按照A编码存储,就必须用A编码解析,否则会出现乱码的现象
-
字符集:是一个系统支持的所有的字符的集合,包括国家文字、标点符号、五星符号、数字等,比如ASCII字符集、GBXXX字符集、Unicode字符集
-
方法 说明 编码: byte[] getBytes() 使用平台默认的字符集将该String编码为一系列字节,将结果存储到新的字节数组中 byte [] getBytes(String charseName) 使用指定的字符集将该String编码为一系列字节,将结果存储到指定的字节数组中 解码: String(byte[] bytes) 通过平台的默认字符集解码指定的字符数组来构造新的String String(byte[] bytes,String charsetName) 通过指定的字符集解码指定的字符数组来构造新的String
字符输入流Reader
-
子类InputStreamReader 来实现Reader
-
InputStreamReader 是从字节流到字符流的桥:它读取字节,并使用指定的
charset
将其解码为字符 。 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集 -
构造方法
-
方法 说明 InputStreamReader(InputStream in)
创建一个使用默认字符集的InputStreamReader。 -
常用方法:
-
方法 说明 void``flush()
刷新流。 void``write(int c)
写一个字符 void``write(String str, int off, int len)
写一个字符串的一部分。 void``write(char[] cbuf, int off, int len)
写入字符数组的一部分。 -
InputStreamReader ir=new InputStreamReader(new FileInputStream("C:/IdeaProjects/TEST/fos.txt")); char[] ch=new char[1024]; int b; ir.read(ch); System.out.println(ch); ow.close(); ir.close();
字符输出流Writer
-
子类OutputStreamWriter来实现Writer
-
构造方法:
-
方法 说明 OutputStreamWriter(OutputStream out)
创建一个使用默认字符编码的OutputStreamWriter。 -
常用方法
-
方法 说明 int``read()
读一个字符 int``read(char[] cbuf, int offset, int length)
将字符读入数组的一部分。 -
OutputStreamWriter ow=new OutputStreamWriter(new FileOutputStream("C:/IdeaProjects/TEST/fos.txt")); String str="你好中国"; char[] by={'爪','哇'}; ow.write(str); ow.write(by); ow.close();