- 对于UNIX平台,绝对路径名的前缀始终为"/" 。 相对路径名没有前缀。 表示根目录的抽象路径名具有前缀"/"和空名称序列。
- 对于Microsoft Windows平台,包含驱动器盘符的路径名的前缀由后面跟着":“的驱动器号组成,文件夹分隔符可以是”/“也可以是”\\"(转义字符)。
创建FIle对象
package pc;
import java.io.File;
import java.io.IOException;
public class demo1 {
public static void main(String[] args) {
File file0 = new File("a.txt"); // 可以用createNewFile()直接创建文件
File file1 = new File("e:\\dir"); // 可以用mkdir()直接创建文件夹
File file2 = new File("e:/dir/a/txt"); // 需要有dir这个目录才可以用createNewFile()创建文件 下同
File file3 = new File("dir");
File file4 = new File("dir/a.txt");
File file5 = new File("dir/dir1/dir2"); // 若有不存在的父目录,必须用mkdirs()
File file6 = new File(file3, "b.txt");
File file7 = new File(file3, "dirs");
File file8 = new File("dir", "c.txt");
}
}
-
-
Constructor and Description File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。 File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。 File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例。 File(URI uri) 通过将给定的 file: URI转换为抽象路径名来创建新的 File实例。
-
-
File类既可以对文件操作,也可以对文件夹操作
文件操作
- 判断文件是否存在、创建文件、重命名文件、删除文件、获取文件信息(名称,大小、修改时间、是否隐藏)等
package pc;
import java.io.File;
import java.io.IOException;
public class demo2 {
public static void main(String[] args) {
File file0 = new File("a.txt");
System.out.println(file0.exists());
try {
file0.createNewFile();
System.out.println("创建文件夹");
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("\n============================");
System.out.println(file0.canExecute());
System.out.println(file0.canRead());
System.out.println(file0.canWrite());
System.out.println("============================\n");
// 对比File("a.txt") 和 File("绝对路径")的区别
File absoluteFile = file0.getAbsoluteFile(); // 获得绝对路径名形式
System.out.println("file0:");
System.out.println(file0.getAbsolutePath());
System.out.println(file0.getName());
System.out.println(file0.getParent());
System.out.println(file0.getPath());
System.out.println("\n absoluteFile:");
System.out.println(absoluteFile.getAbsolutePath());
System.out.println(absoluteFile.getName());
System.out.println(absoluteFile.getParent());
System.out.println(absoluteFile.getPath());
System.out.println("============================\n");
System.out.println(file0.getFreeSpace());
System.out.println(file0.getTotalSpace());
System.out.println(file0.length());
System.out.println(file0.isFile());
System.out.println(file0.isHidden());
System.out.println(file0.lastModified());
file0.renameTo(new File("aa.txt"));
System.out.println(file0.getAbsolutePath());
// file0.setLastModified()
file0.setReadOnly();
System.out.println(file0.canWrite());
System.out.println(file0.toURI());
}
}
/*
结果:
false
创建文件夹
============================
true
true
true
============================
file0:
D:\programme\Git\sweet-xia\java\File\a.txt
a.txt
null
a.txt
absoluteFile:
D:\programme\Git\sweet-xia\java\File\a.txt
a.txt
D:\programme\Git\sweet-xia\java\File
D:\programme\Git\sweet-xia\java\File\a.txt
============================
244320161792
785319456768
0
true
false
1637386283928
D:\programme\Git\sweet-xia\java\File\a.txt
false
file:/D:/programme/Git/sweet-xia/java/File/a.txt
Process finished with exit code 0
*/
- isFile() 是判断是否是文件
- isDirector() 判断是否是文件夹
另一个创建文件夹的方法 createTempFile
package pc;
import java.io.File;
import java.io.IOException;
public class demo2_1 {
public static void main(String[] args) {
File dir = new File("dir");
try {
File.createTempFile("cccc", ".txt", dir); // 前缀太短会报错 后缀包括'.'
} catch (IOException e) {
e.printStackTrace();
}
}
}
- createTempFile(String prefix, String suffix, File directory) 如果directory参数是null那么将使用系统相关的默认临时文件目录。 默认临时文件目录由系统属性java.io.tmpdir 。 在UNIX系统上,此属性的默认值通常为"/tmp"或"/var/tmp" ; 在Microsoft Windows系统上,通常是"C:\WINNT\TEMP"
文件夹操作
- 判断文件夹是否存在、创建文件夹、删除文件夹、获取文件夹的子文件夹及文件等
package pc;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
public class demo3 {
public static void main(String[] args) {
File file3 = new File("dir");
File file4 = new File("dir/a.txt");
File file5 = new File("dir/dir1/dir2");
File file6 = new File(file3, "b.txt");
File file7 = new File(file3, "dirs");
File file8 = new File("dir", "c.txt");
file3.mkdir();
file5.mkdirs();
// 创建更多文件和文件夹,使dir文件夹中的内容更多,便于下面方法的测试
file7.mkdir();
try {
file4.createNewFile();
file6.createNewFile();
file8.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(file3.isDirectory());
System.out.println(file3.isHidden());
String[] str = file3.list();
File[] files = file3.listFiles();
System.out.println(Arrays.toString(str));
System.out.println(Arrays.toString(files));
// 带过滤器参数的list()方法和listFiles()方法在下面介绍
}
}
/*
结果:
true
false
[a.txt, b.txt, c.txt, dir1, dirs]
[dir\a.txt, dir\b.txt, dir\c.txt, dir\dir1, dir\dirs]
*/
-
-
Modifier and Type Method and Description boolean canExecute() 测试应用程序是否可以执行此抽象路径名表示的文件。 boolean canRead() 测试应用程序是否可以读取由此抽象路径名表示的文件。 boolean canWrite() 测试应用程序是否可以修改由此抽象路径名表示的文件。 int compareTo(File pathname) 比较两个抽象的路径名字典。 boolean createNewFile() 当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。 static File createTempFile(String prefix, String suffix) 在默认临时文件目录中创建一个空文件,使用给定的前缀和后缀生成其名称。 static File createTempFile(String prefix, String suffix, File directory) 在指定的目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。 boolean delete() 删除由此抽象路径名表示的文件或目录。 void deleteOnExit() 请求在虚拟机终止时删除由此抽象路径名表示的文件或目录。 boolean equals(Object obj) 测试此抽象路径名与给定对象的相等性。 boolean exists() 测试此抽象路径名表示的文件或目录是否存在。 File getAbsoluteFile() 返回此抽象路径名的绝对形式。 String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。 File getCanonicalFile() 返回此抽象路径名的规范形式。 String getCanonicalPath() 返回此抽象路径名的规范路径名字符串。 long getFreeSpace() 返回分区未分配的字节数 named此抽象路径名。 String getName() 返回由此抽象路径名表示的文件或目录的名称。 String getParent() 返回此抽象路径名的父 null的路径名字符串,如果此路径名未命名为父目录,则返回null。 File getParentFile() 返回此抽象路径名的父,或抽象路径名 null如果此路径名没有指定父目录。 String getPath() 将此抽象路径名转换为路径名字符串。 long getTotalSpace() 通过此抽象路径名返回分区 named的大小。 long getUsableSpace() 返回上的分区提供给该虚拟机的字节数 named此抽象路径名。 int hashCode() 计算此抽象路径名的哈希码。 boolean isAbsolute() 测试这个抽象路径名是否是绝对的。 boolean isDirectory() 测试此抽象路径名表示的文件是否为目录。 boolean isFile() 测试此抽象路径名表示的文件是否为普通文件。 boolean isHidden() 测试此抽象路径名命名的文件是否为隐藏文件。 long lastModified() 返回此抽象路径名表示的文件上次修改的时间。 long length() 返回由此抽象路径名表示的文件的长度。(以字节为单位) String[] list() 返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。 String[] list(FilenameFilter filter) 返回一个字符串数组,命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录。 File[] listFiles() 返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。 File[] listFiles(FileFilter filter) 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。 File[] listFiles(FilenameFilter filter) 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。 static File[] listRoots() 列出可用的文件系统根。 boolean mkdir() 创建由此抽象路径名命名的目录。 boolean mkdirs() 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。 boolean renameTo(File dest) 重命名由此抽象路径名表示的文件。 boolean setExecutable(boolean executable) 为此抽象路径名设置所有者的执行权限的便利方法。 boolean setExecutable(boolean executable, boolean ownerOnly) 设置该抽象路径名的所有者或每个人的执行权限。 boolean setLastModified(long time) 设置由此抽象路径名命名的文件或目录的最后修改时间。 boolean setReadable(boolean readable) 一种方便的方法来设置所有者对此抽象路径名的读取权限。 boolean setReadable(boolean readable, boolean ownerOnly) 设置此抽象路径名的所有者或每个人的读取权限。 boolean setReadOnly() 标记由此抽象路径名命名的文件或目录,以便只允许读取操作。 boolean setWritable(boolean writable) 一种方便的方法来设置所有者对此抽象路径名的写入权限。 boolean setWritable(boolean writable, boolean ownerOnly) 设置此抽象路径名的所有者或每个人的写入权限。 Path toPath() 返回从此抽象路径构造的对象。 String toString() 返回此抽象路径名的路径名字符串。 URI toURI() 构造一个表示此抽象路径名的 file: URI。
-
FilenameFilter接口
- 用于实现此接口的类的实例用于过滤文件名。
- 这是一个功能界面,因此可以用作lambda表达式或方法引用的赋值对象。 (只有一个抽象方法)
例:查找"D:\someFiles"下所有以.jpg结尾的文件名
package pc;
import java.io.File;
import java.io.FilenameFilter;
public class demo4 {
public static void main(String[] args) {
File file = new File("D:\\someFiles");
String[] str = file.list(((dir, name) -> name.endsWith(".jpg")));
for (String s : str) {
System.out.println(s);
}
}
}
-
-
Modifier and Type Method and Description boolean accept(File dir, String name) 测试指定文件是否应包含在文件列表中。
-
-
本例中参数dir是对象File(“D:\someFiles”),name是"D:\someFiles"下的子文件和子目录的文件名,和FileFilter接口中的参数区别开。
FileFilter接口
-
抽象路径名的过滤器。
-
和FilenameFilter一样只有一个抽象方法,可以使用lambda表达式和方法引用
-
本例中的参数pathname是"D:\someFiles"下所有文件的File对象
-
dir、name、pathname的关系是:pathname.getName()==name;pathname.getParentFile()==dir
-
-
Modifier and Type Method and Description boolean accept(File pathname) 测试指定的抽象路径名是否应包含在路径名列表中。
-
package pc;
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
public class demo5 {
public static void main(String[] args) {
File file = new File("D:\\someFiles");
// 效果和上面那个例子类似 查找"D:\someFiles"下所有以.jpg结尾的文件
File[] files1 = file.listFiles(pathname -> pathname.getName().endsWith(".jpg"));
for (File file1 : files1) {
System.out.println(file1); // File的toString()方法调用的是getPath()方法
}
// 找到"D:\someFiles"下所有的文件
File[] files2 = file.listFiles(pathname -> pathname.isFile());
for (File file1 : files2) {
System.out.println(file1);
}
}
}
RandomAccessFile 随机访问文件类
- 支持对随机存储文件的读取和写入。
package pc;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
public class TestRandomAccessFile {
public static void main(String[] args) {
try {
RandomAccessFile raf = new RandomAccessFile("raf.txt", "rw");
for (int i = 0; i < 5; i++) {
raf.writeInt(i);
}
raf.seek(0); // 将指针定位到文件头部
for (int i = 0; i < 5; i++) {
System.out.println(raf.readInt());
}
raf.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
-
-
Constructor and Description RandomAccessFile(File file, String mode) 创建一个随机访问文件流从File参数指定的文件中读取,并可选地写入文件。 RandomAccessFile(String name, String mode) 创建随机访问文件流,以从中指定名称的文件读取,并可选择写入文件。
-
-
参数mode 是模式,“r” 为只读,“rw” 为可读可写,"rwd"模式可用于减少执行的I / O操作数。 使用"rwd"只需要更新要写入存储的文件内容; 使用"rws"需要更新要写入的文件的内容及其元数据,这通常需要至少一个低级I / O操作。
-
-
Modifier and Type Method and Description void close() 关闭此随机访问文件流并释放与流相关联的任何系统资源。 FileChannel getChannel() 返回与此文件关联的唯一的FileChannel对象。 FileDescriptor getFD() 返回与此流关联的不透明文件描述符对象。 long getFilePointer() 返回此文件中的当前偏移量。 long length() 返回此文件的长度。 int read() 从该文件读取一个字节的数据。 int read(byte[] b) 从该文件读取最多 b.length字节的数据到字节数组。 int read(byte[] b, int off, int len) 从该文件读取最多 len个字节的数据到字节数组。 boolean readBoolean() 从此文件读取一个 boolean 。 byte readByte() 从此文件中读取一个带符号的八位值。 char readChar() 从此文件中读取一个字符。 double readDouble() 从此文件读取 double 。 float readFloat() 从此文件读取一个 float 。 void readFully(byte[] b) 从此文件读取 b.length字节到字节数组,从当前文件指针开始。 void readFully(byte[] b, int off, int len) 从此文件中读取 len个字节到字节数组,从当前文件指针开始。 int readInt() 从该文件读取一个带符号的32位整数。 String readLine() 从此文件中读取下一行文本。 long readLong() 从该文件中读取一个带符号的64位整数。 short readShort() 从此文件中读取一个已签名的16位数字。 int readUnsignedByte() 从此文件中读取一个无符号的八位数字。 int readUnsignedShort() 从该文件中读取一个无符号的16位数字。 String readUTF() 从该文件读取字符串。 void seek(long pos) 设置文件指针偏移,从该文件的开头测量,发生下一次读取或写入。 void setLength(long newLength) 设置此文件的长度。 int skipBytes(int n) 尝试跳过 n字节的输入丢弃跳过的字节。 void write(byte[] b) 从指定的字节数组写入 b.length个字节到该文件,从当前文件指针开始。 void write(byte[] b, int off, int len) 从指定的字节数组写入 len个字节,从偏移量 off开始写入此文件。 void write(int b) 将指定的字节写入此文件。 void writeBoolean(boolean v) 将 boolean写入文件作为一个字节值。 void writeByte(int v) 将 byte写入文件作为单字节值。 void writeBytes(String s) 将字符串作为字节序列写入文件。 void writeChar(int v) 将 char写入文件作为两字节值,高字节为先。 void writeChars(String s) 将一个字符串作为字符序列写入文件。 void writeDouble(double v) 双参数传递给转换 long使用 doubleToLongBits方法在类 Double ,然后写入该 long值到该文件作为一个八字节的数量,高字节。 void writeFloat(float v) 浮子参数的转换 int使用 floatToIntBits方法在类 Float ,然后写入该 int值到该文件作为一个四字节数量,高字节。 void writeInt(int v) 将 int写入文件为四个字节,高字节 int 。 void writeLong(long v) 将 long写入文件为八个字节,高字节为先。 void writeShort(int v) 将 short写入文件作为两个字节,高字节优先。 void writeUTF(String str) 以机器无关的方式使用UTF-8编码将字符串写入文件。
-
表格内容摘自java api文档