File工具
File类就是用俩将文件或者文件夹封装对象,弥补流对象的不足——流只能操作数据,不能操作文件夹的
封装的是路径!!!
构造方法演示
1.可以将已有的未出现的文件或者文件夹封装成对象。
File f1=new File(“c:\\abc\\a.txt”);
File f2=new File("d:\\abc","ab.txt"打印,会打印路径。;目录分隔符,为了更好地跨平台File。
File类常见功能
1,创建
createNewFile()创建成功,ture。如果该文件已经存在,不再创建,而输出流会替换
创建文件夹dir.mkdir,只能创建1级目录。mkdirs,创建多级目录
2,删除
f.delete()文件正在被使用时不可delete。用deleteOnExit
3,判断
boolean exists()判断是否存在该文件。判断文件还是文件夹
isFile和isdirectory必须先判断是否存在~!谁说文件夹后面不能带.txt?
带了盘符就是绝对路径
4,获取信息
getNamegetpath getabsolutePath返回该路径的绝对路径字符串形式,getabsoluteFile
getparent 该方法返回的是绝对路径中的父目录,如果是相对目录,返回null。如果相对路径中有上一层目录返回该目录
renameto重命名,可以剪切到另一目录~
文件列表
File[] files=File.listRoots;File.list返回当前目录下的所有文件,调用list方法的对象必须是目录封装体,且该目录必须存在,list有一个文件名过滤的重载方法,这个要实现内部接口,建议使用内部类,根据accept方法的返回值来确定是否需要过滤文件~
listFiles()返回的是路径的对象~list.length返回文件数目,listfile.length返回路径下大小~
列出目录下的所有内容——递归~
目录中还有目录,只要使用同一个列出目录,若还有目录,功能内重新调用功能
递归的注意事项,要顶定义条件,否则死循环,是目录才要递归。先走一遍再往回返~有方法体语句~要注意递归次数,递归太大,会导致内存溢出哦
import java.util.*;//习惯不太好啊,即使在同一个文件也是要多分几个class~ import java.io.*; class Hehe{//为了使打印效果有层次感,这部分是用来添加到文件名称前面的符号 public String getLevel(int level){ StringBuffer sb=new StringBuffer(); for(int i=0;i<=level;i++)sb.append("|--"); return sb.toString(); } ArrayList<String> list=new ArrayList<String>(); //获取目录信息,将目录信息收集起来放在List集合上 public void getDirs(File file,int level) throws IOException{ File fil[]=file.listFiles(); level++; for (int i=0;i<fil.length;i++) { if(fil[i].isDirectory()){ System.out.println(getLevel(level)+fil[i]); list.add(getLevel(level)+fil[i].toString()+"\r\n"); getDirs(fil[i],level); } else { String string=fil[i].toString(); if(string.endsWith(".avi")) { System.out.println(getLevel(level)+string); list.add(getLevel(level)+string+"\r\n"); } else continue; } } } //将List集合里面元素的信息打印出来 public void writerqq() throws IOException{ BufferedWriter bufferedwriter= new BufferedWriter(new FileWriter(new File("d:\\NewJava.txt"))); Iterator<String> it=list.iterator(); while(it.hasNext()){ String string=it.next(); bufferedwriter.write(string.replace("D:\\BaiduYunDownload\\张孝详J2SE高深讲解", "")); } bufferedwriter.flush(); } } public class JavaBasic { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub Hehe hehe=new Hehe(); hehe.getDirs(new File("D:\\BaiduYunDownload\\张孝详J2SE高深讲解"),0); hehe.writerqq(); } } /*|--|--D:\BaiduYunDownload\张孝详J2SE高深讲解\02_eclipse及IDE开发工具介绍.avi |--|--D:\BaiduYunDownload\张孝详J2SE高深讲解\03_eclipse工程管理与快捷键配置.avi |--|--D:\BaiduYunDownload\张孝详J2SE高深讲解\04_eclipse视图管理与程序调试.avi |--|--D:\BaiduYunDownload\张孝详J2SE高深讲解\05_配置eclispe的编译与运行环境.avi |--|--D:\BaiduYunDownload\张孝详J2SE高深讲解\06_在eclispe中配置java模板代码.avi |--|--D:\BaiduYunDownload\张孝详J2SE高深讲解\07_在eclipse中导入已有的工程.avi |--|--D:\BaiduYunDownload\张孝详J2SE高深讲解\08_java5的静态导入与编译器语法设置.avi*/
复制目录下的所有文件
把目录下的所有文件复制到另一个地方存储也是非常常见的操作,文件夹内主要有两种文件,文件和文件夹,这两种类型应该分开来分别操作。往硬盘里存是数据的持久化存储~
import java.io.*; public class CopyWay { public static void copyFolder(File src,File dest) throws IOException{ if(src.isDirectory()){//新建目录部分 if(!dest.exists())dest.mkdir(); String files[]=src.list(); for(String file:files){ File srcFile=new File(src,file); File destFile=new File(dest,file); copyFolder(srcFile,destFile);//利用递归的思想把,访问文件夹内的文件夹 } } else {//文件夹内的部分将执行这部分代码 InputStream in=new FileInputStream(src);//字节流写入 OutputStream out=new FileOutputStream(dest);//字节流写出 byte[] buffer=new byte[1024]; int length; while((length=in.read(buffer))>0) out.write(buffer, 0, length); in.close(); out.close(); } } public static void main(String[] args) throws IOException { // TODO Auto-generated method stub File srcFloder=new File(new File("d:\\"),"TestForCopy"); File destFloder=new File(new File("c:\\"),"CarzyCopy"); copyFolder(srcFloder,destFloder); } }
Properties
hashtaple的子类
具备map集合的特点,里面存储的键值都是字符串。
是集合和IO技术相结合的集合容器,可用于键值对的配置信息
需求:如何将properties存入文本,
如何将文本存入properties。
黑马程序员——Java I/O流基础知识点(File类),布布扣,bubuko.com