1、将文件系统中的文件或文件夹封装成对象,提供属性和方法对文件进行操作

2、方法:

creatNewFile();创建文件,若存在则不创建,返回false。(输出流则是有无都创建)

boolean mkdir();创建一级文件夹;mkdirs();创建多级文件夹

boolean delete();删除文件;deleteOnExit()程序结束前删除文件

boolean canExecute():是否可被执行;boolean exists():文件是否存在

boolean isFile():是否是文件;isDirectory():是否是文件夹

boolean isHidden():是否是隐藏文件;isAbsolute():路径是否是绝对路径

String getName():文件名;String getPath():相对路径

String getParent():绝对路径的父目录,无则返回null,有上一级则返回上一级

String getAbsolutePath():获取绝对路径

boolean renameTo(File dest);:对文件重命名为dest

String[] list():列出当前目录所有文件名。目录必须存在

File[] list(FileNameFilter filter):对指定文件进行过滤,需实现FileNameFilter文件名过滤器

File[] listFiles():获取当前文件夹下的文件和文件夹





/**
 * File类 
 * @author Administrator
 *
 */
import java.io.*;
public class FileDeom1
{
    public static void main(String[] args)
    {
	consMethod();
    }
    //创建File对象
    public static void consMethod()
    {
	//将a.txt封装成file对象,可以将已有的和未出现的文件或文件夹封装成对象
	File f1 = new File("a.txt");
	
	//第二种方式,  可以将文件名封装   好处  文件名可以为变量  
	File f2 = new File("c:\\abc","b.txt");
	
	//第三种   将路径封装
	File d = new File("c\\abc");
	File f3 = new File(d,"c.txt");
	
	sop("f1:" + f1);
	sop("f2:" + f2);
	sop("f3:" + f3);
	
	//File.separator  是路径分割符   可以跨平台
	File f4 = new File("c:"+File.separator +"abc" +File.separator +"zzz" + File.separator +"a.txt");
	
	sop("f4:" + f4);
    }
    public static void sop(Object obj)
    {
	System.out.println(obj);
    }
    

}






***************************************************邪恶的分割线**********************************************************************************************************************




import java.io.*;

/**
 * File类常见方法:
 * 1, 创建,
 * 	boolean createNewFile(): 在指定位置创建文件,如果该文件已经存在,
 * 则不创建,返回false。和输出流不一样,输出流对象一定建立创建文件。
 * 而且文件已经存在,会覆盖。
 * 	
 * 	boolean mkdir(): 创建文件夹
 * 
 * 	boolean mkdirs(); 创建多级文件夹
 * 2, 删除。
 * 	boolean delete(): 删除失败返回false 删除指定文件
 * 	void deleteOnExit():在程序退出时删除指定文件。
 * 
 * 3,判断。
 * 	boolean existe(): 判断文件是否存在
 * 	ifFile(): 判断是否是文件
 * 	isDirectory(): 判断是否为文件夹
 * 	isHidden(): 判断是否为隐藏文件
 * 
 * 4 获取信息。
 * 
 * 	getName();获取文件或目录的名称
 * 	getPath();获取路径名 转换为路径字符串
 * 	getParent(); 返回路径名父目录的路径名字符串,如果没有有返回null
 * 	
 * 	getAbsolutePath():获取绝对路径(返回字符串)
 * 	lastModified(): 获取最后一次修改的时间
 * 	length() 文件大小
 * 
 * @author Administrator
 *
 */
public class FileDemo2
{
    public static void main(String[] args) throws IOException
    {
	//method_1();
	//method_2();
	//method_3();
	//method_4();
	//method_5();
	method_6();
    }
    
    public static void method_1()throws IOException//调用底层要抛异常
    {
	//创建文件对象
	File f = new File("file.txt");
	
	//程序退出的时候删除指定文件   这里是对象
	f.deleteOnExit();
	
	//建立文件 返回boolean类型
	//sop("create :" + f.createNewFile());
	
	//删除指定文件 返回boolean类型
	sop("delete: " + f.delete());
	
	
    }
    
    public static void method_2()
    {
	
	File f = new File("file.txt");
	
	//判断文件是否存在
	sop("existe:" + f.exists());
	
	//判断文件是否能执行
	//sop("execute:" + f.canExecute());
    }
    
    public static void method_3()
    {
	//创建文件夹, mkdir最多创建一级目录
	File dir = new File("abc\\kk");
	
	
	sop("mkdir: " + dir.mkdir());
	
	//创建多级文件夹 dir.mkdirs()
	//sop("mkdir: " + dir.mkdirs());
	
	
    }
    
    public static void method_4()
    {
	File f = new File("file.txt");
	
	//判断文件对象是否是文件或者目录时,必须要先判断该文件
	//对象的内容是否存在  通过,exists判断
	//判断是否目录(文件夹)
	sop("dir:" + f.isDirectory());
	
	//判断是否是文件
	sop("file" + f.isFile());
    }
    
    public static void method_5()
    {
	File f = new File("file.txt");
	
	//获取相对路径
	sop("path:" + f.getPath());
	//获取绝对路径
	sop("abspath" + f.getAbsolutePath());
	//该方法返回的是绝对路径父目录,如果获取的是相对路径,返回null
	sop("parent:" + f.getParent());
    }
    
    public static void method_6()
    {
	//建立对象
	File f1 = new File("D:/Student/java/test/demo.txt");
	File f2 = new File("D:/Student/java/test/demo2.txt");
	
	//改变文件的名字  将demo.txt 变成demo2.txt
	sop("rename: " + f1.renameTo(f2));
    }
    
    
    public static void sop(Object obj)
    {
	System.out.println(obj);
    }
    
    

}







***************************************************邪恶的分割线**********************************************************************************************************************



import java.io.File;

//listRoots 列出可用的文件系统根。
//list 列出指定目录下的所有可用文件
//listFiles(FileFilter filter) 

public class FielDemo3
{
    public static void main(String[] args)
    {
	//listRootsDemo();
	listDemo();
    }
    
    //列出机器里面的有效盘符
    public static void listRootsDemo()
    {
	
	File[] files = File.listRoots();
	
	for(File f: files)
	{
	    System.out.println(f);
	}
    }
    
    //c盘下的目录 相当于dos 下 的 dir指令,不过可以看到隐藏文件
    public static void listDemo()
    {
	//只在c盘下
	File f = new File("c:\\");
	//调用list方法中的file对象必须封装了了一个目录,该目录必须存在
	String[] names = f.list();
	
	//for循环增强 
	for(String name : names)
	{
	    System.out.println(name);
	}
    }

}








***************************************************邪恶的分割线**********************************************************************************************************************


/**
 * 列出目录文件下 .java 的所有文件  文件名过滤
 * @author Administrator
 *
 */
import java.io.*;

public class FileDemo4
{
    public static void main(String[] args)
    {
	method_1();
	//method_2();
    }

    public static void method_1()
    {
	File dir = new File("D:\\Student\\java\\test");

	// 将目录的文件给字符串数组 、、传的是匿名内部类
	String[] arr = dir.list(new FilenameFilter()
	{
	    public boolean accept(File dir, String name)
	    {
		// return true;
		/*
		 * if(name.endsWith(".bmp")) { return true; } return false;
		 */
		// endWith 方法 返回结尾是否是参数里的真假
		return name.endsWith(".java");
	    }
	});

	System.out.println("len:" + arr.length);

	// for循环增强 输出目录中文件
	for (String name : arr)
	{
	    System.out.println(name);
	}
    }
    
    
    //第二种 使用listFiles 经常用这种
    public static void method_2()
    {
	File dir = new File("D:\\Student\\java\\test");
	
	File[] files = dir.listFiles();
	
	for(File f : files)
	{
	    System.out.println(f.getName() + ":" + f.length());
	}
	
    }

}





***************************************************邪恶的分割线**********************************************************************************************************************



/**
 * 需求:列出指定目录下文件或者文件夹,包含子目录的内容。
 * 也就是列出指定目录下所有内容(使用递归的方法)
 * @author Administrator
 *
 */
import java.io.*;

public class FileDemo5
{
    public static void main(String[] args)
    {
	// 创建文件对象
	File dir = new File("D:/Student/java/test");
	showDir(dir);
    }

    public static void showDir(File dir)
    {
	// 提前打印出是哪个目录的
	System.out.println(dir);
	// 将文件对象传递给 文件数组 files
	File[] files = dir.listFiles();

	for (File f : files)
	{
	    // 如果是目录 递归调用
	    if (f.isDirectory())
	    {
		showDir(f);
	    } else
	    {
		System.out.println(f);

	    }

	}
    }
}






***************************************************邪恶的分割线**********************************************************************************************************************


/**
 * 需求:删除一个带内容的目录
 * 删除原理:
 * 在window中,删除目录是从里面往外删除的。
 * 
 * 既然是从里面往外删除,就需要用到递归。
 * 
 * @author Administrator
 *
 */
import java.io.*;

public class FileDemo6
{
    public static void main(String[] args)
    {
	File dir = new File("D:\\Student\\java\\Test2\\test");
	removeDir(dir);
    }

    // 删除文件
    public static void removeDir(File dir)
    {
	File[] files = dir.listFiles();

	for (File f : files)
	{
	    // 如果删除的是目录 那么递归调用删除方法
	    if (f.isDirectory())
	    {
		removeDir(f);
	    }
	    // 如果是文件那么删除
	    else
	    {
		System.out.println(f.toString() + "::" + f.delete());
	    }
	    // 一次递归结束 删除文件夹
	    System.out.println(dir + "::dir::" + dir.delete());
	}
    }

}







***************************************************邪恶的分割线**********************************************************************************************************************




/**
 * 需求: 将一个指定目录下的java文件的绝对路径,存储到一个文本文件中。
 * 
 * 建立一个java文件列表
 * 
 * 思路:
 * 1, 对指定的额目录进行递归。
 * 2, 获取递归过程所有的java文件的路径。
 * 3, 将这些路径存储到集合中。
 * 4, 将集合中的数据写入到一个文件中。
 * 
 * @author Administrator
 *
 */
import java.io.*;
import java.util.*;

public class FileDemo7
{
    public static void main(String[] args) throws IOException
    {
	//文件路径封装成对象
	File dir = new File("D:/Student/java");

	//创建集合
	List<File> list = new ArrayList<File>();

	fileToList(dir, list);
	// System.out.println(list.size());

	File file = new File(dir, "javalist.txt");
	writeToFile(list, file.toString());
    }

    // 传递 参数 为: 一个是文件对象, 一个是容器list
    public static void fileToList(File dir, List<File> list)
    {
	// 将所有文件对象给 文件数组 files
	File[] files = dir.listFiles();

	// 对文件数组进行遍历
	for (File f : files)
	{
	    // 判断是否目录
	    if (f.isDirectory())
	    {
		// 如果是目录 递归调用
		fileToList(f, list);
	    } else
	    // 不是目录0
	    {
		// 获取名字 判断扩展名
		if (f.getName().endsWith(".java"))
		    ;
		list.add(f);// 如果是java文件存入容器中

	    }
	}
    }

    // 把容器中的数据写入到文件
    public static void writeToFile(List<File> list, String javaListFile)
    {
	// 定义写入缓冲流
	BufferedWriter bufw = null;

	try
	{
	    // 将缓冲流写入 这里包装了一下
	    bufw = new BufferedWriter(new FileWriter(javaListFile));

	    for (File f : list)
	    {
		// 循环的将路径名赋值给 字符串 path
		String path = f.getAbsolutePath();

		// 写入文件
		bufw.write(path);
		// 换行
		bufw.newLine();
		// 刷新缓冲区
		bufw.flush();

	    }

	} catch (IOException e)
	{
	    e.printStackTrace();
	} finally
	{
	    try
	    {
		// 关闭流
		bufw.close();
	    } catch (IOException e)
	    {
		e.printStackTrace();
	    }

	}

    }

}





***************************************************邪恶的分割线**********************************************************************************************************************



改名字,把.java改成.jad



import java.io.File;

public class RemoveFileTest
{
    public static void main(String[] args)
    {
	File source = new File("d:/jad");
	
	File[] files = source.listFiles();

	for(File f : files)
	{
	    String name = f.getName();
	    String newName = name.replace(".java", ".jad");
	    
	    File oldFile = new File(source,name);
	    File newFile = new File(source,newName);
	    boolean t =oldFile.renameTo(newFile);
	    System.out.print(t);
	}
	
	
	
	
    }
}