java.io.File类是IO包中唯一一个与文件本身操作(创建,删除,重命名)有关的类。
并且,File类只能操作文件本身,不能操作文件内容。
File类基本操作
继承至comparable,可以进行排序操作。
可以设置访问路径,对路径的配置主要通过构造方法处理:
public File(String pathname);
设置操作的完整路径public File(Fiile parent,String child)
设置父路径与子目录
基本操作:
- 创建新的文件:
public boolean createNewFile() throws IOException
- 判断文件是否存在:
public boolean exists();
- 删除文件:
public boolean delete();
import java.io.File;
public class FileTest {
public static void main(String[] args) throws Exception {
File file=new File("F://course//file.txt");
if(file.exists()) {
file.delete();
}else {
System.out.println(file.createNewFile());
}
}
}
File类操作深入
不同系统有不同的分割符:windows:“\”,linux或unix:“/”
解决不同系统分割符的不同,File提供了常量:public static final String separator;
File file=new File("F://course"+File.separator+"file.txt");
但是现在不同分割符可以随意使用了。
File file=new File("F:/course/file.txt");
文件创建前提:文件的父路径首先存在。
获取父路径:public File getParentFile();
创建多级目录:public File mkdirs()
import java.io.File;
public class FileTest {
public static void main(String[] args) throws Exception {
File file=new File("F:/course/file.txt");
if(!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
if(file.exists()) {
file.delete();
}else {
System.out.println(file.createNewFile());
}
}
}
获取文件信息
- 文件是否可读:
public boolean canRead();
- 文件是否可写:
public boolean canWrite();
- 文件是否可执行:
public boolean canExecute()
- 获取文件大小(字节长度):
public long length();
- 最后一次修改日期时间:
public long lastModified();
- 判断是否是目录:
public boolean isDirectory();
- 判断是否是文件:
public boolean isFile();
如果是目录,需要列出目录中的全部内容:
- 列出目录内容:
public File[] listFiles();
import java.io.File;
public class FileTest {
public static void main(String[] args) throws Exception {
File file=new File("F:/course");
System.out.println("是否是目录:"+ file.isDirectory());
System.out.println("是否是文件:"+file.isFile());
if(file.isDirectory()) {
File result[]=file.listFiles();
for(File obj:result) {
System.out.println(obj);
}
}
}
}
只涉及文件本身,不涉及文件内容处理。
案例:列出目录结构
import java.io.File;
public class FileTest {
public static void main(String[] args) throws Exception {
File file=new File("F:/course");
System.out.println("是否是目录:"+ file.isDirectory());
System.out.println("是否是文件:"+file.isFile());
listDir(file);
}
public static void listDir(File file) {
if(file.isDirectory()) {
File result[]=file.listFiles();
if(result!=null) {
for(File obj:result) {
listDir(obj);
}
}
}
System.out.println(file);
}
}
如果目录为空,会报错,所以需要判断。
案例:文件批量更名
将此路径下的文件后缀名都改为“.png”。
import java.io.File;
public class FileTest {
public static void main(String[] args) throws Exception {
File file=new File("F:/photo");
System.out.println("是否是目录:"+ file.isDirectory());
System.out.println("是否是文件:"+file.isFile());
listDir(file);
}
public static void listDir(File file) {
if(file.isDirectory()) {
File result[]=file.listFiles();
if(result!=null) {
for(File obj:result) {
listDir(obj);
}
}
}
if(file.isFile()) {
String newfile;
if(file.getName().contains(".")) {
newfile=file.getName().substring(0, file.getName().lastIndexOf("."))+".png";
}else {
newfile=file.getName()+".png";
}
System.out.println(newfile);
//System.out.println(file.renameTo(file));//执行前做好心理准备
}
}
}
目录中文件的批量处理采用以上代码结构(递归)。