继续上一章,学习JavaIO框架
【Java】(二十三)IO框架:流的概念与分类,字节流(对象流【序列化、反序列化】),编码方式,字符流(打印流,转换流)
上一节的学习(字节流,字符流)都是对文件内容的增删改查,无法对文件本身进行重命名删除等操作,因此有File类的实现。
5 File类
- 概念:代表物理盘符中的一个文件或者文件夹。
- 方法:
public boolean CreateNewFile()
当且仅当指定的文件名不存在时创建一个指定的新的、空的文件。创建成功返回true,如果指定文件名已存在返回false。
public boolean mkdir()
创建一个指定路径名的文件夹。当且仅当文件夹被创建时返回true,否则返回false。
public boolean delete()
删除一个指定的文件或文件夹,文件夹必须为空才能被删除。当且仅当指定的文件或文件夹被删除时返回true,否则返回false。
public boolean exists()
检查指定的文件或文件夹是否存在。当且仅当指定的文件或者文件夹存在时返回true,否则返回false。
public File[] listFiles()
列出目录中的所有内容,返回一个指定路径名中的文件数组,如果指定的路径名不代表一个文件夹(目录)就返回null。
public boolean renameTo(File dest)
重命名一个路径名所指定的文件。当且仅当修改操作成功时返回true,否则返回false。
5.1 文件操作
package IO;
import java.io.File;
import java.util.Date;
//文件操作
public class FileText {
public static void main(String[] args) throws Exception{
seperator();
FileOp();
}
//1.分隔符
public static void seperator(){
System.out.println("路径分隔符"+ File.pathSeparator);// ;
System.out.println("名称分隔符"+File.separator);// \
}
//2.文件操作
public static void FileOp() throws Exception{
//2.1创建文件
File f = new File("E:\\code\\JAVA\\file.txt");//抽象表示的文件和目录的路径名,并没有创建
if(!f.exists()){//如果文件不存在
boolean nf = f.createNewFile();//文件名不存在时创建一个指定的新的、空的文件
System.out.println("创建文件结果:"+nf);
}
//2.2删除文件
// //(1)直接删除
// Thread.sleep(5000);//睡眠时间,5000毫秒=5s,方便观察
// f.delete();//运行到这里就删除了
// //(2)使用jvm退出时删除
// f.deleteOnExit();//程序结束时删除
// Thread.sleep(5000);
//2.3获取文件信息
System.out.println("文件绝对路径:"+f.getAbsolutePath());
System.out.println("获取路径:"+f.getPath());
System.out.println("获取父目录:"+f.getParent());
System.out.println("获取文件名称:"+f.getName());
System.out.println("获取文件长度:"+f.length());
System.out.println("获取文件创建时间:"+new Date(f.lastModified()).toLocaleString());
//4.判断
System.out.println("是否可写:"+f.canWrite());
System.out.println("是否可读:"+f.canRead());
System.out.println("是否隐藏:"+f.isHidden());
System.out.println("是否是文件:"+f.isFile());
System.out.println("是否是文件夹:"+f.isDirectory());
}
}
/*
路径分隔符;
名称分隔符\
创建文件结果:true
文件绝对路径:E:\code\JAVA\file.txt
获取路径:E:\code\JAVA\file.txt
获取父目录:E:\code\JAVA
获取文件名称:file.txt
获取文件长度:0
获取文件创建时间:2021-10-23 10:31:15
是否可写:true
是否可读:true
是否隐藏:false
是否是文件:true
是否是文件夹:false
*/
Windows支持指定是否只读、隐藏。
5.2 文件夹操作
package IO;
import java.io.File;
import java.util.Date;
//文件夹操作
public class FilePackText {
public static void main(String[] args) throws Exception{
directorOp();
}
public static void directorOp() throws Exception{
//1.创建文件夹
// File dir=new File("aaa\\bbb\\ccc");//相对路径创建
File dir=new File("E:\\code\\JAVA\\aaa\\bbb\\ccc");//绝对路径创建
if (!dir.exists()) {
//mkdir();只能创建单级目录
System.out.println("创建结果:"+dir.mkdirs());//创建多级目录
}
//2.删除文件夹
// //2.1 直接删除(必须为空目录)
// System.out.println("删除结果:"+dir.delete());
// //2.2 使用jvm删除
// dir.deleteOnExit();
//3.获取文件夹信息
System.out.println("获取绝对路径:"+dir.getAbsolutePath());
System.out.println("获取路径:"+dir.getPath());
System.out.println("获取父目录:"+dir.getParent());
System.out.println("获取创建时间:"+new Date(dir.lastModified()).toLocaleString());
System.out.println("文件夹名称:"+dir.getName());
//4.判断
System.out.println("是否隐藏:"+dir.isHidden());
System.out.println("是否是文件:"+dir.isFile());
//5.遍历文件夹
File dir2=new File("E:\\code\\JAVA\\");
String[] files=dir2.list();
for (String string : files) {
System.out.println(string);
}
}
}
/*
创建结果:true
获取绝对路径:E:\code\JAVA\aaa\bbb\ccc
获取路径:E:\code\JAVA\aaa\bbb\ccc
获取父目录:E:\code\JAVA\aaa\bbb
获取创建时间:2021-10-23 11:03:10
文件夹名称:ccc
是否隐藏:false
是否是文件:false
01.jpg
02.jpg
a.txt
aaa
b.txt
c.txt
file.txt
JavaSE
*/
5.3 文件过滤器(FileFilter接口)
- FileFilter接口(public interface FileFilter):
boolean accept(File pathname)
- 当调用File类中的
listFiles()
方法时,支持传入FileFilter接口实现类,对获取的文件进行过滤,只有满足条件的文件才可以出现在listFiles()的返回值中。
package IO;
import java.io.File;
import java.io.FileFilter;
//文件过滤器
public class FileFilterText {
public static void main(String[] args) {
directorOp();
}
public static void directorOp() {
File dir = new File("E:\\code\\JAVA\\");
File[] files1=dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
if(pathname.getName().endsWith(".txt")) {
return true;
}
return false;
}
});
for (File file : files1) {
System.out.println(file.getName());
}
}
}
/*
a.txt
b.txt
c.txt
file.txt
*/
5.4 应用:递归遍历文件夹
package IO;
import java.io.File;
//递归遍历文件夹
public class ListDemo {
public static void main(String[] args) {
File dir = new File("E:\\code\\JAVA\\aaa\\");
listDir(dir);
// deleteDir(dir);
}
//递归遍历文件夹
public static void listDir(File dir){
File[] files = dir.listFiles();
System.out.println("文件夹:"+dir.getAbsolutePath());
if((files!=null)&&(files.length>0)){//路径非空
for (File file : files) {
if(file.isDirectory()){//如果是文件夹递归遍历
listDir(file);
}
else{
System.out.println("文件:"+file.getAbsolutePath());
}
}
}
}
//递归删除(只能删除空文件夹)
public static void deleteDir(File dir) {
File[] files=dir.listFiles();
if (files!=null&&files.length>0) {
for (File file : files) {
if (file.isDirectory()) {
deleteDir(file);
}else {
file.delete();
}
}
}
dir.delete();
}
}
/*
文件夹:E:\code\JAVA\aaa
文件夹:E:\code\JAVA\aaa\bbb
文件夹:E:\code\JAVA\aaa\bbb\ccc
文件:E:\code\JAVA\aaa\bbb\ccc\a.txt
文件:E:\code\JAVA\aaa\bbb\ccc\b.txt
文件:E:\code\JAVA\aaa\bbb\ccc\c.txt
文件:E:\code\JAVA\aaa\bbb\ccc\你好.txt
*/
6 Properties属性集合
- 特点:
(1)存储属性名和属性值(键值对)。
(2)属性名和属性值都是字符串类型。
(3)没有泛型。
(4)和流有关(所以没有整理在集合里面)。Properties可以保存在一个流中或是从一个流中加载. - 方法:
public String getProperty(String key)
根据key在属性列表里查找value,如果原始属性列表找不到就去默认属性列表找。返回key所对应的value。
public void list(PrintWriter out)
将属性列表打印在指定的输出流上,在debug时很有用。
public Object setProperty(String key,String value)
内部调用的是Hashtable的put方法,将key和value成对地保存在属性列表中。返回这个key上一个对应的value,没有就返回null。
package IO;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.Properties;
import java.util.Set;
//集合properties的使用
public class PropertiesText {
public static void main(String[] args) throws Exception{
//创建集合
Properties properties = new Properties();
//添加对象<字符串,字符串>
properties.put("Java","first");
properties.put("Python","useful");
properties.put("C","basic");
//遍历
//(1)keySet 略
//(2)entrySet 略
//(3)stringPropertyNames()
Set<String> set=properties.stringPropertyNames();
for (String string : set) {
System.out.println(string+" "+properties.getProperty(string));
}
//和流有关的方法
//list
PrintWriter printWriter=new PrintWriter("E:\\code\\JAVA\\print.txt");
properties.list(printWriter);
printWriter.close();
//store保存
FileOutputStream fileOutputStream=new FileOutputStream("E:\\code\\JAVA\\s.properties");
properties.store(fileOutputStream, "NOTES");
fileOutputStream.close();
//load加载
Properties properties2=new Properties();
FileInputStream fileInputStream=new FileInputStream("E:\\code\\JAVA\\s.properties");
properties2.load(fileInputStream);
fileInputStream.close();
System.out.println(properties2);
}
}
/*
Java first
Python useful
C basic
{Java=first, Python=useful, C=basic}
*/