小言_互联网的博客

Java之File类

347人阅读  评论(0)

File类

概念:代表物理盘符中的一个文件或者文件夹
创建一个File对象

  • 相对路径创建
public class TestFile {
	public static void main(String[] args) {
		//创建File对象,相对路径(在该项目下)
		File f = new File("abc.txt");
		try {
			//File.separator,转义符"\"
			System.out.println(File.separator);
			//创建一个新的对象
			f.createNewFile();
			System.out.println("success");
			//显示最后一次文件的修改时间 
			System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date(f.lastModified())));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

执行结果

创建的文件

  • 绝对路径创建
public static void main(String[] args) {
		//	根据路径名创建一个文件对象(结对路径)
		//  File.separator,表示"\"
		//连接起来便是   D:\java\hello.java
		File f = new File("D:\\java" + File.separator + "hello.java");
		try {
			//	文件如果不存在
			if (!f.exists())
				//	在真实路径下创建一个物理文件
				f.createNewFile();
			else
				//	删除该文件对象所在真实路径下的物理文件
				f.delete();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

执行结果

File常用方法

方法名 说明
createNewFile() 创建一个新文件
mkdir() 创建一个新目录(如果父目录不存在,创建不成功)
mkdirs() 创建一个新目录(即使父路径不存在,该方法也能够创建有必要的父路径用来创建子路径)
delete() 删除文件或空目录
exists() 判断File对象所代表的对象是否存在
getAbsolutePath() 获取文件的绝对路径
getName() 取得名字
isDirectory() 是否是目录
isFile() 是否是文件
length() 获取文件的长度
list() 列出目录中的所有内容(不包括父路径)
listFiles() 列出目录中的所有内容(包括父路径)
renameTo() 修改文件名
isAbsolute() 判断一个文件对象是否绝对路径
getPath() 获取一个文件对象具体路径
getParent() 获取一个用绝对路径创建的文件对象的父路径
isHidden() 判断一个文件对象是否是隐藏文件
canExecute() 判断一个文件对象是否可执行
canWrite() 判断一个文件对象是否可写
canRead() 判断一个文件对象是否可读
lastModified() 可以获取文件的最后一次修改时间,注意返回值是一个表示时间的long类型的值

经典栗子

1.列出给定path路径下所有特定后缀的的文件

public class FileTraverse {
	//创建静态成员  list集合  保存目录下的文件名
	static List<String> list = new ArrayList<>();
	//main方法,测试
	public static void main(String[] args) {
		//找出image文件夹下,后缀为.jpg和.png的文件
		getFileListBySurfix("D:\\java\\image", ".jpg",".png");
		//打印
		System.out.println(list);
	}
	//自定义方法,因为可能求多个后缀,将参数设定为可变参数
	public static List<String> getFileListBySurfix(String path, String ... surfix){
		//创建File对象
		File f = new File(path);
		//判断f 是否为文件
		if(f.isFile()) {
			//如果是文件,执行此处代码,遍历可变参数的值
			for(String s:surfix) {
				//判断文件后缀是否在参数中
				if(f.getName().endsWith(s)) {
					//如果在,追加到list集合
					list.add(f.getAbsolutePath());
				}
			}
		//如果f 不是文件(文件夹)  执行此处代码
		}else {
			//得到文件夹中所有的文件
			String []str = f.list();
			//遍历
			for(String s:str) {
				//递归调用自己(参数不要忘记)
				getFileListBySurfix(path + File.separator + s,surfix);
			}
		}
		//返回值
		return list;
	}
}

执行结果

2.使用FileWriter对象来实现将给定内容写入文件中

public static void main(String[] args) throws IOException {
		//创建fFile对象
		File f = new File("Hello.java");
		//判断f是否存在
		if(!f.exists()) {
			//如果不存在,则创建新的文件夹
			f.createNewFile();
		}
		String str = "public static void main(String[] args)";
		//	使用文件对象来创建FileWriter对象
		FileWriter fw = new FileWriter(f);
		
		//	使用FileWriter对象来实现将给定内容写入文件中,只需要操作流本身,流会自动来操作文件
		fw.write(str);
		System.out.println("write done.");

		//	用完流之后记得关闭资源
		fw.close();
	}

执行结果

hello.java中

3.读取文件夹中的内容

	public static void main(String[] args) {
		//创建f对象
		File f = new File("Hello.java");
		//创建FileReader对象
		FileReader fr = null;
		try {
			//赋值
			fr = new FileReader(f);
			int len = 0;
			//read方法,会读出一个字符,然后指针向后移一位
			//每执行一次,指针就会后移
			//不加len,用fr.read()) != -1判断,这里read就会执行
			//故读出来的数据会跳一位
			while ((len = fr.read()) != -1)
				System.out.print((char) len);

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (fr != null) {
					//关闭资源
					fr.close();
					//使得JVM更快的清理
					fr = null;
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

执行结果

4.“拷贝”(先读出一个文件的内容,再将该内容写入到新创建的文件)

public class TestFileCopy {
	public static void main(String[] args) {
		//创建可变长度字符串
		StringBuilder sb = new StringBuilder();
		//创建File对象
		File f1 = new File("Hello.java");
		//创建FileReader对象
		FileReader fr = null;
		
		try {
			fr = new FileReader(f1);
			int len = 0;
			while((len = fr.read()) != -1) {
				//将Hello.java中的内容读取出来
				//将内容追加到可变长度字符串内
				sb.append((char)len);
			}
			//打印可变字符串
			System.out.println(sb);
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				if(fr != null) {
					//关闭资源
					fr.close();
					//使得JVM早点清理
					fr = null;
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		//分隔符
		System.out.println("===============");
		//创建新的File对象
		File f2 = new File("hello2.java");
		//创建新文件
		if(!f2.exists()) {
			try {
				f2.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		//创建FileWriter对象
		FileWriter fw = null;
		try {
			fw = new FileWriter(f2);
			//将可变字符串的内容加入到新的文件
			fw.write(sb.toString());
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				if(fw != null) {
				//关闭资源
					fw.close();
					fw = null;
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		System.out.println("copy done!");
	}
}

执行结果

hello2.java文件里


转载:https://blog.csdn.net/qq_43336579/article/details/108246464
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场