1.FIle相关方法及说明
static String pathSeparator 依赖于系统的路径分隔符,String 类型的表示
static char pathSeparator 依赖于系统的路径分隔符,char 类型的表示
签名 说明
File(File parent, String child) 根据父目录 + 孩子文件路径,创建一个新的 File 实例
File(String pathname) 根据文件路径创建一个新的 File 实例,路径可以是绝对路径或者相对路径
File(String parent, String child)
String getParent() 返回 File 对象的父目录文件路径
String getName() 返回 FIle 对象的纯文件名称
String getPath() 返回 File 对象的文件路径
String getAbsolutePath() 返回 File 对象的绝对路径
String getCanonicalPath() 返回 File 对象的修饰过的绝对路径
boolean exists() 判断 File 对象描述的文件是否真实存在
boolean isDirectory() 判断 File 对象代表的文件是否是一个目录
boolean isFile() 判断 File 对象代表的文件是否是一个普通文件
boolean createNewFile() 根据 File 对象,自动创建一个空文件。成功创建后返回 true
boolean delete() 根据 File 对象,删除该文件。成功删除后返回 true
void deleteOnExit() 根据 File 对象,标注文件将被删除,删除动作会到JVM 运行结束时才会进行
String[] list() 返回 File 对象代表的目录下的所有文件名
File[] listFiles() 返回 File 对象代表的目录下的所有文件,以 File 对象表示
boolean mkdir() 创建 File 对象代表的目录
boolean mkdirs() 创建 File 对象代表的目录,如果必要,会创建中间目录
boolean renameTo(File dest) 进行文件改名,也可以视为我们平时的剪切、粘贴操作
boolean canRead() 判断用户是否对文件有可读权限
boolean canWrite() 判断用户是否有可写权限
2.文件内容的操作---流对象
标准库中提供的读写文件的流对象,不是一个两个类,而是有很多类。但是总的可以分为两大类
1.字节流(对应着二进制文件)
每次读写的最小单位是字节(8bit)
1.InputStream
2.OutputStream
和writer类似,OutputStream打开一个文件,默认就会清空文件的原有内容。而输入的数据,就会成为文件中新的数据。如果不想清楚,就可以用追加写的方式。
2.字符流(对应着文本文件)
每次读写的最小单位是字符(一个字符可能是对应多个字节)
一个字符到底对应几个字节?看当前的字符
GBK,一个中文字符->两个字节
UTF-8,一个中文字符->三个字节
本质上是针对字节流进行了又一层封,字符流就能自动地帮我们把文件中的几个相邻的字节转换成一个字符
:输入->读 输出->写 入CPU就叫输入,出CPU就叫输出
1.Reader
- 无参数read:一次读取一个字符
- 一个参数read:一次读取若干个字符,会把指定的cbuf数组给填满
- 三个参数read:一次读取若干个字符,会把参数执行的cbuf数组中的,从offset到length这么长范围给填满
- 一个文件读完了就要进行关闭,这就要用到read.close();其目的是为了释放文件描述符
- 文件描述符
- 是一个顺序表,一个进程里每打开一个文件就需要在这个表里分配一个元素,但是这个顺序表的空间是有上限的。如果只打开而不释放,等到顺序表满了,再打开文件就会出错。
import java.io.FileReader; class Main { public static void main(String[] args) throws IOException { Reader reader = new FileReader("d:/test.txt"); while (true) { int c = reader.read();//无参read if(c == -1) { break; } char ch = (char)c; System.out.print(ch); } try{ while (true) { char[] cbuf = new char[1024]; int n = reader.read(cbuf); if(n == -1) { break; } System.out.println("n = " + n); for (int i = 0; i < n; i++) { System.out.print(cbuf[i]); } } }finally { reader.close(); }//此种写法可以保证不管try中是异常还是正常值执行,都可以执行close } }
2.Writer
import java.io.Writer; class Main{ public static void main(String[] args) { try(Writer writer = new FileWriter("d:/text.txt")) { writer.write("Hello world."); } catch (IOException e) { throw new RuntimeException(e); } } }