File(十六)
File对象表示路径,可以是文件,可以是文件夹,该路径可存在,可不存在。
绝对路径:绝对路径是带盘符的。
相对路径:相对路径不带盘符,默认到当前项目下去找。
构造方法
//格式1
public File(String pathname)
把字符串表示的路径变成File对象
//格式2
public File(String parent,String child)
把父级路径和子级路径进行拼接
//格式3
public File(File parent,String child)
//把父级路径对应文件对象和子级路径进行拼接
范例:
import java.io.File;
public class Test{
public static void main(String[] args){
//public File(String pathname)
String pathname="d:\\javafiletest\\a.txt";
File file1=new File(pathname);
System.out.println(file1);
//public File(String parent,String child)
String parent1="d:\\javafiletest";
String child1="a.txt";
File file2=new File(parent1,child1);
System.out.println(file2);
//public File(File parent,String child)
File file3=new File("d:\\javafiletest");
String child2="a.txt";
File file4=new File(file3,child2);
System.out.println(file4);
}
}
/*
d:\javafiletest\a.txt
d:\javafiletest\a.txt
d:\javafiletest\a.txt
*/
常用成员方法
判断
isDirectory
格式:
public boolean isDirectory()
说明:判断此路径名表示的File是否为文件夹
isFile
格式:
public boolean isFile()
说明:判断此路径名表示的File是否为文件
exits
格式:
public boolean exits()
说明:判断此路径名表示的File是否存在
范例
import java.io.File;
public class Test{
public static void main(String[] args){
File file=new File("d:\\javafiletest\\a.txt");
System.out.println("isDirectory:"+file.isDirectory());//false
System.out.println("isFile:"+file.isFile());//true
System.out.println("exists:"+file.exists());//true
System.out.println();
File file1=new File("d:\\javafiletest\\b");
System.out.println("isDirectory:"+file1.isDirectory());//true
System.out.println("isFile:"+file1.isFile());//false
System.out.println("exists:"+file1.exists());//true
System.out.println();
File file2=new File("d:\\javafiletest\\c");
System.out.println("isDirectory:"+file2.isDirectory());//false
System.out.println("isFile:"+file2.isFile());//false
System.out.println("exists:"+file2.exists());//false
}
}
/*
isDirectory:false
isFile:true
exists:true
isDirectory:true
isFile:false
exists:true
isDirectory:false
isFile:false
exists:false
*/
获取
length
格式:
public long length()
说明:返回文件的大小(单位字节),无法获得文件夹的大小,若使用该方法返回文件夹大小,会返回错误值
getAbsolutePath
格式:
public String getAbsolutePath()
说明:返回文件的绝对路径
getPath
格式:
public String getPath()
说明:返回定义文件时使用的路径
getName
格式:
public String getName()
说明:返回文件的名称,带后缀,若返回文件夹,则不带后缀,就是文件夹的名字
lastModified
格式:
public long lastModified()
说明:返回文件的最后修改时间
范例
import java.io.File;
public class Test{
public static void main(String[] args){
File file=new File("D:\\javafiletest\\a.txt");
File directory=new File("D:\\javafiletest\\b");
System.out.println("length方法");
System.out.println(file.length()+"字节");
System.out.println(directory.length()+"字节");
System.out.println();
System.out.println("getAbsolutePath方法");
File file1=new File("practice\\b.txt");
System.out.println(file.getAbsoluteFile());
System.out.println(file1.getAbsoluteFile());
System.out.println();
System.out.println("getPath方法");
System.out.println(file.getPath());
System.out.println(file1.getPath());
System.out.println();
System.out.println("getName方法");
System.out.println(file.getName());
System.out.println(directory.getName());
System.out.println();
System.out.println("lastModified方法");
int l=(int)file.lastModified();
System.out.println(l);
}
}
/*
length方法
7字节
0字节
getAbsolutePath方法
D:\javafiletest\a.txt
D:\Javacode\practice\practice\b.txt
getPath方法
D:\javafiletest\a.txt
practice\b.txt
getName方法
a.txt
b
lastModified方法
389686339
*/
创建
createNewFile
格式:
public boolean createNewFile()
说明:创建一个新的空的文件
细节:
- 若当前路径表示的文件是不存在的,则创建成功,方法返回true
- 若当前路径表示的文件是存在的,则创建失败,方法返回false
- 若父级路径是不存在的,那么方法会有异常IOException
- createNewfFile方法创建的一定是文件,若路径中不包含后缀名,则创建一个没有后缀的文件
mkdir
格式:
public boolean mkdir()
说明:创建单级文件夹
细节:
- Windows当中路径是唯一的,若当前路径已存在,则创建失败,返回false
- mkdir方法只能创建单级文件夹,无法创建多级文件夹
mkdirs
格式:
public boolean mkdirs()
说明:创建多级文件夹
范例
//d:\javafiletest文件夹初始为空
import java.io.File;
import java.io.IOException;
public class Test{
public static void main(String[] args) throws IOException {
System.out.println("createNewFile方法");
File file1=new File("D:\\javafiletest\\a.txt");
boolean flag1=file1.createNewFile();
System.out.println(flag1);
File file2=new File("D:\\javafiletest\\a.txt");
boolean flag2=file2.createNewFile();
System.out.println(flag2);
File file3=new File("D:\\javafiletest\\a");
boolean flag3=file3.createNewFile();
System.out.println(flag3);
File file4=new File("D:\\aaa\\a.txt");
boolean flag4=file4.createNewFile();
System.out.println(flag4);
}
}
/*
createNewFile方法
true
false
true
Exception in thread "main" java.io.IOException: 系统找不到指定的路径。
at java.io.WinNTFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(File.java:1012)
at Test.main(Test.java:20)
*/
d:\javafiletest文件夹初始为空
import java.io.File;
import java.io.IOException;
public class Test{
public static void main(String[] args) throws IOException {
System.out.println("mkdir方法");
File file5=new File("D:\\javafiletest\\a");
System.out.println(file5.mkdir());
File file6=new File("D:\\javafiletest\\b\\a");
System.out.println(file6.mkdir());
System.out.println();
System.out.println("mkdirs方法");
File file7=new File("D:\\javafiletest\\b\\a");
System.out.println(file7.mkdirs());
}
}
/*
mkdir方法
true
false
mkdirs方法
true
*/
删除
delete
格式:
public boolean delete()
说明:删除文件、空文件夹
细节:
- 若删除的是文件,则直接删除,不走回收站
- 若删除的是空文件夹,则直接删除,不走回收站
- 若删除的是有内容的文件夹,则删除失败
/*
d:\\javafiletest文件下有三条路径
D:\javafiletest\a
D:\javafiletest\b\b.txt
D:\javafiletest\c.txt
*/
import java.io.File;
public class Test{
public static void main(String[] args){
System.out.println("delete方法");
File file1=new File("D:\\javafiletest\\a");
System.out.println(file1.delete());
File file2=new File("D:\\javafiletest\\c.txt");
System.out.println(file2.delete());
File file3=new File("D:\\javafiletest\\b");
System.out.println(file3.delete());
}
}
/*
delete方法
true
true
false
*/
获取并遍历
listFiles
格式:
public File[] listFiles()
说明:获取当前该路径下所有内容
细节:
- 当调用者File表示的路径不存在时,返回null
- 当调用者File表示的路径是文件时,返回null
- 当调用者File表示的路径是一个空文件夹时,返回一个长度为0的数组
- 当调用者File表示的路径是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
- 当调用者File表示的路径是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件
- 当调用者File表示的路径是需要权限才能访问的文件夹时,返回null
范例
import java.io.File;
public class Test{
public static void main(String[] args){
System.out.println("listFiles方法");
File file=new File("D:\\javafiletest");
File[] files=file.listFiles();
for (File file1:files){
System.out.println(file1);
}
}
}
/*
listFiles方法
D:\javafiletest\a
D:\javafiletest\b
D:\javafiletest\c.txt
D:\javafiletest\d.txt
*/
范例
例1
/*
true
*///需求:在当前模块下的aaa文件夹中创建一个a.txt文件
import java.io.File;
import java.io.IOException;
public class Test{
public static void main(String[] args) throws IOException {
File file=new File("aaa");
System.out.println(file.mkdirs());
File file1=new File(file,"a.txt");
boolean flag=file1.createNewFile();
if(flag){
System.out.println("创建成功");
}else {
System.out.println("创建失败");
}
}
}
/*
创建成功
*/
例2
//需求:定义一个方法寻找d:\\javafiletest文件夹中,是否存在以.txt为结尾的文件(不考虑子文件夹)
import java.io.File;
public class Test{
public static void main(String[] args){
File file = new File("d:\\javafiletest");
if(findtxt(file)){
System.out.println("存在");
}else {
System.out.println("不存在");
}
}
public static boolean findtxt(File file){
File[] files=file.listFiles();
for (File f:files){
if(f.isFile()&&f.getName().endsWith(".txt")){
return true;
}
}
return false;
}
}
例3
//需求:找到d:\\javafiletest文件夹中所有以.txt结尾的文件
import java.io.File;
public class Test{
public static void main(String[] args){
File file = new File("d:\\javafiletest");
findtxt(file);
}
public static void findtxt(File file){
File[] files=file.listFiles();
for (File f:files){
if(f.isDirectory()){
findtxt(f);
}else{
if(f.getName().endsWith(".txt")){
System.out.println(f);
}
}
}
}
}
例4
//需求:删除一个多级文件夹
import java.io.File;
public class Test{
public static void main(String[] args){
File file = new File("d:\\javafiletest\\test");
delete(file);
}
public static void delete(File file){
File[] files=file.listFiles();
for (File f:files){
if(f.isFile()){
f.delete();
}else {
delete(f);
}
}
file.delete();
}
}
例5
//计算文件总大小
import java.io.File;
public class Test{
public static void main(String[] args){
File file = new File("d:\\javafiletest");
System.out.println(statistic(file));
}
public static long statistic(File file){
File[] files=file.listFiles();
long sum=0;
for(File f:files){
if(f.isFile()){
sum+=f.length();
}else {
sum+=statistic(f);
}
}
return sum;
}
}
//36987
例6
/*
需求:统计一个文件夹中每种文件的个数并打印。(考虑子文件夹)
打印格式:
txt:3个
md:4个
doc:5个
*/
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Test{
public static void main(String[] args){
File file = new File("d:\\javafiletest");
HashMap<String,Integer> hm=getCount(file);
Set<Map.Entry<String,Integer>> entries=hm.entrySet();
for (Map.Entry<String,Integer> entry:entries){
System.out.println(entry.getKey()+":"+entry.getValue());
}
}
public static HashMap<String,Integer> getCount(File file){
HashMap<String,Integer> hm=new HashMap<>();
File[] files=file.listFiles();
for (File f:files) {
//文件
if(f.isFile()){
String[] splits=f.getName().split("\\.");
int length=splits.length;
if(length!=1){
String s=splits[splits.length-1];
if(hm.containsKey(s)){
int count=hm.get(s);
count++;
hm.put(s,count);
}else {
hm.put(s,1);
}
}
}
//文件夹
else {
HashMap<String,Integer> hmSon=getCount(f);
Set<Map.Entry<String,Integer>> entries=hmSon.entrySet();
for (Map.Entry<String,Integer> entry:entries){
String key=entry.getKey();
int value=entry.getValue();
if(hm.containsKey(key)){
int i=hm.get(key);
i=i+value
hm.put(key,i);
}else{
hm.put(key,value);
}
}
}
}
return hm;
}
}
/*
txt:7
xlsx:3
md:2
doc:2
*/