File类
File类
文件和目录路径名的抽象表示形式
File类既可以表示文件,也可以表示目录。
构造方法:
File(String pathname):根据一个路径得到File对象
File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象
创建功能:
public boolean createNewFile():创建一个新的文件 如果存在这样的文件,会返回false
public boolean mkdir():创建文件夹 如果存在这样的文件夹,返回false。该方法只能创建单层目录 如果创建多层目录得一层一层创建
public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来 可以创建多层目录 当然也可以创建单层目录
判断功能
public boolean isDirectory(): 判断是否是目录
public boolean isFile(): 判断是否是文件
public boolean exists(): 判断是否存在
public boolean canRead(): 判断是否可读
public boolean canWrite(): 判断是否可写
public boolean isHidden(): 判断是否隐藏
获取功能
public String getAbsolutePath(): 获取File对象的绝对路径
public String getPath(): 获取File对象的相对路径
public String getParent() 返回File对象的上级文件路径;如果此路径名没有指定父目录,则返回 null。
public File getParentFile() 返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。
public long getTotalSpace() 返回此抽象路径名指定的分区大小。 返回总容量 单位字节
public long getFreeSpace() 返回此抽象路径名指定的分区中未分配的字节数。返回剩余容量 单位字节
public String getName(): 获取File对象的名称
public long length(): 获取长度。字节数
public long lastModified(): 获取最后一次的修改时间,毫秒值
public String[] list(): 获取指定目录下的所有文件或者文件夹的名称数组
public File[] listFiles(): 获取指定目录下的所有文件或者文件夹的File数组 ,实际上是将一个文件夹中的每个子文件和文件夹作为File对象存到一个File类型的数组中
public static void main(String[] args) throws Exception {
File f=new File("D:\\idea\\java code\\src\\learn\\IO\\classFile\\Test01.java");
//此方法用来判断文件或者文件路径是否存在于硬盘
System.out.println(f.exists());//true
File f1=new File("D:\\1");
System.out.println(f1.exists());
File f2=new File("D:\\a\\b\\c\\d");
//如果不存在该文件或者文件路径,创建它
if(!f1.exists()){
//创建文件路径
//f1.mkdir();
//创建该文件
//f1.createNewFile();
}
if(!f2.exists()){
//创建多重目录
f2.mkdirs();
}
}
删除功能
public boolean delete():删除文件或者文件夹
这个方法在删除文件夹的时候,如果该文件夹中有子文件夹或者文件就不能删除,只能删除空文件夹,也可以由内层逐层删掉文件,再删文件夹。
Java中删除的文件在回收站是找不到的,所以在删文件夹或者文件夹前需要注意。
重命名功能
public boolean renameTo(File dest)
两种情况
如果dest对象传进来的文件路径与调用该方法的文件路径名相同的话就是更改文件名
如果dest对象传进来的文件路径名与调用该方法的文件路径名不同就是更改文件名,并剪切原文件。
//删除多级目录文件
public static void main(String[] args) {
File deFile=new File("D:\\ccc");
while (true){
if(deFile.delete()==false){
deleteFile(deFile);
}else {
break;
}
}
}
//该方法的缺陷:一遍只能删除最内层的文件
//在主函数中对其进行循环,如果最外层的文件目录没有被删掉,就让该方法递归调用直至外层文件目录删除完毕
private static void deleteFile(File deFile) {
File[] files=deFile.listFiles();
boolean flag;
for (File f:files) {
if(f.isFile()){
f.delete();
}else {
flag=f.delete();
if(flag==true){
break;
}else {
deleteFile(f);
}
}
}
}
//判断文件夹中有没有“.jpg”文件,如果有将其转换成“.png”格式
public static void main(String[] args) {
File Path=new File("D:\\图片");
picFormat(Path);
}
private static void picFormat(File path) {
File[] files=path.listFiles();//得到一个File类型的数组,存储是原文件目录的子目录与子文件
for (File pic:files) {
if(pic.isDirectory()){//循环判断File类型元素是文件目录还是文件
picFormat(pic);
}else {
//getParent()方法可以的到该文件的上级路径,再与自己修改后的文件名相拼接,就会得到新的文件名。
if(pic.getName().endsWith(".jpg")) {
pic.renameTo(new File(pic.getParent() + "\\" + pic.getName().substring(0, pic.getName().indexOf(".jpg")) + ".png"));
}
}
}
}
//使用递归找出某文件目录下的子文件目录,并将文件复制到另一个文件目录下
public static void main(String[] args) throws IOException {
File f=new File("D:\\code");
//调用方法完成查找文件目录下的文件或者子目录
search(f);
}
public static void search(File f) throws IOException {
//判断File是否为文件,如果不是文件,让其继续递归
if(f.isFile()){
String path=f.getAbsolutePath();//定义原文件的路径
FileInputStream fis=new FileInputStream(path);//将原文件路径传入字节输入流
File file=new File("D:\\code1");//将被粘贴的文件路径封装
File newFile=new File(file.getAbsolutePath()+File.separator+f.getName());//新的文件的文件路径是被粘贴的文件路径拼接上原来的文件名称
if(!newFile.exists()){//判断新的文件是否存在于新的文件目录
//没有存在,就创建其的多重目录
file.mkdirs();
}
/*
创建字节输出流,字节输出流的路径就是新的文件的文件路径。注意:字节输出流只能针对于文件路径传入,不能传入文件目录(文件夹的路径)
如果传入文件夹的路径,那么就会报错 java.io.FileNotFoundException(拒绝访问)
*/
FileOutputStream fos=new FileOutputStream(newFile);
//读写操作(读取原文件的字节,写入新文件中)
byte[] bytes=new byte[1024];
int temp=0;
while ((temp=fis.read(bytes))!=-1){
fos.write(bytes,0,temp);
}
//刷新
fos.flush();
//关闭
fis.close();
fos.close();
return;
}
//f有两种可能,f可能是文件,也可能是目录
File[] fs=f.listFiles();
//循环输出该文件目录的子目录或者子文件
for (File subF:fs) {
System.out.println(subF.getAbsolutePath());
search(subF);
}
}