File类
只是学习笔记,如果有错误,请在评论区指出,谢谢
一、File类基本操作
1.File 与文件操作有关,是compareTo的子类,可以进行排序处理
2.创建文件
package com.yyr.FileText;
import java.io.File;
public class NewFile {
public static void main(String[] args) throws Exception {
File fl=new File("c:\\open\\clas.txt");//设置要操作完整路径
System.out.println(fl.createNewFile());//创建新文件
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U66Du5Gu-1625886617600)(C:\Users\杨怡然\Desktop\图片\75.PNG)]
3.判断文件是否存在
package com.yyr.FileText;
import java.io.File;
public class NewFile {
public static void main(String[] args) throws Exception {
File fl=new File("c:\\open\\clas.txt");//设置路径
if (fl.exists()){
System.out.println("存在");
}else
System.out.println("不存在");
}
}
输出
存在
4.删除文件
package com.yyr.FileText;
import java.io.File;
public class NewFile {
public static void main(String[] args) throws Exception {
File fl=new File("c:\\open\\clas.txt");
if (fl.exists()){
fl.delete();
System.out.println("执行删除操作");
if (fl.exists()==false)
System.out.println("文件已删除");
}else
System.out.println("不存在");
}
}
输出
执行删除操作
文件已删除
结论:File类实现的就是文件本身的处理
二、File类深入操作
1.正常的路径编写.路径分隔符:File.separator
File fl=new File("c:\\open"+ File.separator +" clas.txt");
结论:这个还是要加个文件目录,不然一样会报出IOException.
2.使用File类进行文件处理的时候要注意:程序>JVM>操作系统函数> 文件处理 ,进行同一文件的删除或创建的时候可能会出现延迟问题,最好别重名,可以使用UUID
3.文件的父路径必须首先存在
如何获取父路径: public File getFile()
创建目录 : public boolean mkdirs()
System.out.println(fl.getParent());//获取父路径,目录必须产生
三、获取文件信息
1.通过File类获取一些文件本身的信息
- 文件是否可读:System.out.println(“文件是否可读”+File.canRead());
- 文件是否可写:System.out.println(“文件是否可写”+File.canWrite());
- 获取文件长度:System.out.println(“文件大小”+File.length());
- 获取最后的修改时间:File.lastModified())
- 判断是否是目录:File.isDiretory()
- 判断是否是文件:File.isFile()
package com.yyr.FileText;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
public class NewFIle2 {
public static void main(String[] args) throws Exception {
File fl=new File("C:\\Users\\Desktop\\图片\\2.PNG");
System.out.println(fl.getParent());
System.out.println("文件是否可读"+fl.canRead());
System.out.println("文件是否可写"+fl.canWrite());
System.out.println("文件大小"+MathUtil.roud(fl.length()/1024/1024,2));
System.out.println("最后的修改时间"+new SimpleDateFormat("yyyy--MM--dd HH:mm:ss").format(new Date(fl.lastModified())));
}
}
class MathUtil{//省略多余小数
private MathUtil(){}
public static double roud(double num, int scale){
return Math.round(Math.pow(10,scale)*num)/Math.pow(10,scale);
}
}
四、综合案例
1.列出指定目录中的全部文件
package com.yyr.FileText;
import java.io.File;
public class FileList {
public static void main(String[] args) {
File file = new File("c:\\open");
listDir(file);
}
public static void listDir(File file) {
if (file.isDirectory()) {//目录存在
File results[] = file.listFiles();//列出目录中的全部内容
for (int i = 0; i < results.length; i++) {
listDir(results[i]);
}
}
System.out.println(file);//获得完整路径;
}
}
c:\open\ clas.txt
c:\open
2)出现NullPointerException,有的目录不能列出
package com.yyr.FileText;
import java.io.File;
public class FileList {
public static void main(String[] args) {
File file = new File("c:");
listDir(file);
}
public static void listDir(File file) {
if (file.isDirectory()) {//目录存在
File results[] = file.listFiles();//列出目录中的全部内容
for (int i = 0; i < results.length; i++) {
listDir(results[i]);
}
}
System.out.println(file);//获得完整路径;
}
}
Exception in thread "main" java.lang.NullPointerException
at com.yyr.FileText.FileList.listDir(FileList.java:14)
at com.yyr.FileText.FileList.listDir(FileList.java:15)
at com.yyr.FileText.FileList.listDir(FileList.java:15)
at com.yyr.FileText.FileList.main(FileList.java:8)
Process finished with exit code 1
修改后;
package com.yyr.FileText;
import java.io.File;
public class FileList {
public static void main(String[] args) {
File file = new File("c:");
listDir(file);
}
public static void listDir(File file) {
if (file.isDirectory()) {//目录存在
File results[] = file.listFiles();//列出目录中的全部内容
if (results !=null){
for (int i = 0; i < results.length; i++) {
listDir(results[i]);
}
}
}
System.out.println(file);//获得完整路径;
}
}
输出目录
c:Program Files\JetBrains\IntelliJ IDEA 2019.3.3\jbr\legal\java.smartcardio
c:Program Files\JetBrains\IntelliJ IDEA 2019.3.3\jbr\legal\java.sql\ADDITIONAL_LICENSE_INFO
c:Program Files\JetBrains\IntelliJ IDEA 2019.3.3\jbr\legal\java.sql\ASSEMBLY_EXCEPTION
c:Program Files\JetBrains\IntelliJ IDEA 2019.3.3\jbr\legal\java.sql\LICENSE
c:Program Files\JetBrains\IntelliJ IDEA 2019.3.3\jbr\legal\java.sql
2.文件批量改名:编写程序,程序运行时输入目录名称,并把该目录下的所有文件名后缀修改为.txt
1)注意:能够重命名的文件都是有后缀的,如果没有后缀的,必须追加,如果有后缀的路径,
2)StackOverflowError:栈溢出异常,死循环
package com.yyr.FileText;
import java.io.File;
public class FileRename {
public static void main(String[] args)throws Exception {
File file=new File("c:\\open");
long start=System.currentTimeMillis();
renameDir(file);
long end=System.currentTimeMillis();
System.out.println("花费的时间:"+(end-start));
}
public static void renameDir(File file){
if(file.isDirectory()){
File results []=file.listFiles();//列出子目录中的内容
if (results!=null){
for (int i = 0; i < results.length; i++) {
renameDir(results[i]);
}
}
}
else{
if (file.isFile()){
//如果是文件进行重命名
String filename=null;
if(file.getName().contains(".")){
filename=file.getName().substring(0,file.getName().lastIndexOf("."))+".txt";
}
else
{
filename=file.getName()+".txt";
}
File newFile=new File(file.getParentFile(),filename);//新的文件名称
System.out.println(filename);
file.renameTo(newFile);
}
}
}
}