File是java中的与文件相关的类,可以对进行创建、删除、列出目录下的文件,判断文件或者目录。其位于java.io包中。在windows下的路径格式,例如某个桌面目录路径""。但是在java中“\”视为转译字符,因此在在使用该类是我们会将路径名写成“C:\Users\admin\Desktop”或者“C://Users//admin//Desktop”.
相对路径:指不以文件路径名开头的文件路径
绝对路径:指以文件根目录开头的路径
当前目录:指相对于程序运行时的相对路径
File中常用的方法: 列出根目录:File[]listRoot(),在windows下所列出的根目录是将计算机上的逻辑驱动器用数组返回,通俗的讲,返回的就是盘的数量,比如在我的电脑上运行下列代码,打印器器返回的结果为,“第0个目录C:\+第1个目录D:\+第2个目录E:\+第3个目录F:\+第4个目录G:\”
代码节选如下,
/**
* 列出机器上的根目录 */ public void listRoots() { // 直接调用File类的static方法 File[] lf = File.listRoots(); // 输出File对象指向的文件的长度,以byte及,如指向目录,则返回的是0 //System.out.println("磁盘上目录个数是:" + lf.length); // 返回抽象路径名的绝对路径名串符 for (int i = 0; i < lf.length; i++) { System.out.println("第" + i + "个目录" + lf[i].getAbsolutePath()); } }
boolean exist(): 判断File对象是否存在,存在则返回true反之则为false
boolean isFile(): 判断File是否是对文件,是则返回true反之则为false
boolean isDirectory(): 判断File对象是否是目录,是则返回true反之则为false
File getAbsolutePath(): 返回文件的绝对路径
boolean creatNewFile(): 创建个一个新的文件,成功创建则返回true反之则为false。该方法可能会抛出异常,因此需要对异常进行处理(异常请转至http://raidyue.iteye.com/blog/1584943)
boolean delete(): 删除File对象的抽象路径名表示的文件或者目录。若此路径名表示的是目录,则需要目录为空才能删除,删除成功则返回的是true,反之是false
以上几个方法的使用实列:判断是文件是否存在,删除文件,创建文件
public void testCreatAndDelete(String filename) {
// 通过传入的文件名构造File对象 File temFile = new File(filename); // 判断文件是否存在 if (temFile.exists()) { // 判断File指向的文件是否是真是的文件 if (temFile.isDirectory()) { // 输出其路径 System.out.println("这是一个目录:" + temFile.getAbsolutePath()); } } // 判断File对象指向的文件是否是真实的文件 if (temFile.isFile()) { // 打印文件长度 printFileAttr(temFile); // 删除文件 temFile.delete(); String theName = temFile.getName(); String absPath = temFile.getAbsolutePath(); System.out.println("文件已删除,名字是:" + theName + "绝对路径是:" + absPath); }else{ try{ temFile.createNewFile(); System.out.println("文件已创立"+temFile.getAbsolutePath()); //打印文件长度 printFileAttr(temFile); }catch(Exception ef){ System.out.println("创建文件失败"); } } }
递归:
简单说的说递归就是方法自己调用自己的过程,递归最需注意的就是递归结束的判断,如果没有跳出判断,就会陷入死循环。例如,我们用递归求出斐波那契数列的项,一下是代码实列
//求斐波那契数列
public int Recursion(int i) { int f = 0; if (i == 1) { f = 1; } if (i == 2) { f = 1; } if(i>2){ f = Recursion(i - 1) + Recursion(i - 2); } return f; }
当我们求第五项,f5= Recursion(4)+Recursion(3);
=Recursion(3)+Recursion(2)+Recursion(2)+Recursion(1)
=Recursion(2)+Recursion(1)+Recursion(2)+Recursion(2)+Recursion(1)
=5
现在我们知道了递归的方法,我们就能用递归找出某个目录下的所有文件,代码示例如下
public int listDir(String dirName) {
int fileCount = 0; File dirFile = new File(dirName); File[] subFile = dirFile.listFiles(); //我们在这里判断跳出递归的条件 if (subFile == null || subFile.length == 0) { return 0; } for (int i = 0; i < subFile.length; i++) { if (subFile[i].isDirectory()) { String subDir = subFile[i].getAbsolutePath(); System.out.println("目录:" + subDir); txt_area.append(subDir + "\n"); //这是个目录,所以我们以这个目录为起点,重新调用这个方法 fileCount += listDir(subDir); } if (subFile[i].isFile()) { boolean mate = false; fileCount++;、 //这是个文件,我们就获取文件的绝对路径,输出文件的绝对路径 String filePath = subFile[i].getAbsolutePath(); System.out.println("文件" + filePath); mate = readFile(filePath, keyWord); if (mate == true || filePath.contains(keyWord)) { txt_area.append(filePath + "\n"); } } } return fileCount; }