Java学习_20220620
IO框架
1. 桥转换流:字节流和字符流之间的转换,可设置字符的编码方式
InputStreamReader(字节流-->字符流)/OutputStreanWriter(字符流-->字节流)
创建方式:
FileInputStream fileInputStream = new FileInputStream("e:\\aaa.txt");
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream,"utf-8");
FileOutputStream fileOutputStream = new FileOutputStream("e:\\info.txt");
OutputStreamReader outputStreamReader = new OutputStreamReader(fileOutputStream,"utf-8");
2.文件操作File
(1)分隔符
System.out.println("名称分隔符:"+ File.separator); // ;
System.out.println("路径分隔符:"+ File.pathSeparator); // \
(2)创建文件
File file = new File("e:\\files.txt"); //抛出异常
if(!file.exists()){
boolean b = file.createNewFile();
System.out.println("创建结果:"+b); // 若存在该文件,则什么也不返回,若不存在该文件,返回true
}
(3)删除文件
//直接删除文件
System.out.println(file.delete()); //true
//jvm退出时删除
file.deleteOnExit();
Thread.sleep(5000);
(4)获取文件信息
//获取文件信息
System.out.println("获取文件绝对路径:" +file.getAbsolutePath()); //获取文件绝对路径:e:\files.txt
System.out.println("获取文件路径:" +file.getPath()); //获取文件路径:e:\files.txt
System.out.println("获取文件名称:" +file.getName()); //获取文件名称:files.txt
System.out.println("获取父目录:" +file.getParent()); //获取父目录:e:\
System.out.println("文件创建时间:" +new Date(file.lastModified())); //文件创建时间:Mon Jun 20 14:14:40 CST 2022
(5)判断
System.out.println("是否可写:"+file.canWrite());
System.out.println("是否可读:"+file.canRead());
System.out.println("是否是文件"+file.isFile());
System.out.println("是否隐藏"+file.isHidden());
(6)文件夹操作
//创建文件夹
File dir = new File("e:\\qqq\\xxx");
if(!dir.exists()){
// dir.mkdir();//只能创建单级目录
boolean b = dir.mkdirs();
System.out.println("创建结果:"+b);
}
//删除文件夹
//直接删除(只能删除最下层的空目录)
System.out.println(dir.delete());
//使用jvm删除
dir.deleteOnExit();
Thread.sleep(5000);
//遍历文件夹
File dir2 = new File("C:\\Users\\25407\\Desktop\\微博图片");
String[] files = dir2.list();
System.out.println("============");
for(String string : files){
System.out.println(string);
}
3. FileFilter接口
当调用File类中的listFiles()方法时,使用FileFilter接口实现类,对获取文件进行过滤,只用满足条件的文件才可以出现在listFiles()返回值中。
File[] files2 = dir2.listFiles(new FileFilter() {
@Override
public boolean accept(File afile) {
if(afile.getName().endsWith(".png"))
return true;//只选择后缀为:.png 的文件
return false;
}
});
for(File file :files2){
System.out.println(file.getName());
}
}
4. 递归遍历和递归删除文件
public static void main(String[] args) {
ListDir(new File("C:\\Users\\25407\\Desktop\\微博图片"));
deleteDir(new File("C:\\Users\\25407\\Desktop\\微博图片"));
}
//递归遍历文件夹
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{
System.out.println(file.getAbsolutePath()+"删除:"+file.delete());
}
}
}
}
5. Properties:属性集合
特点:1. 存储属性名和属性值
2. 属性名和 属性值都是字符串类型
3. 没有泛型
4. 和流有关
//创建集合
Properties properties = new Properties();
//添加数据
properties.setProperty("username","Zhangsan");
properties.setProperty("age","20");
System.out.println(properties.toString());
//遍历:KeySet\entrySet
//stringPropertyNames()
Set<String> pronames = properties.stringPropertyNames();
for(String pro : pronames){
System.out.println(pro+"====="+properties.getProperty(pro));
}
//和流有关的方法
PrintWriter printWriter = new PrintWriter("e:\\print.txt"); //打印流
properties.list(printWriter);
printWriter.close();
//store方法保存
FileOutputStream fileOutputStream = new FileOutputStream("e:\\store.properties");
properties.store(fileOutputStream,"注释");
fileOutputStream.close();
//load方法加载
Properties properties2 = new Properties();
FileInputStream fileInputStream = new FileInputStream("e:\\store.properties");
properties2.load(fileInputStream);
fileInputStream.close();
System.out.println(properties2.toString());