java学习之IO流3

File类:

1、构造函数和字段

下图中是File类中的构造函数,separator是File类中的静态字段,表示名称分隔符,在windows中是‘\’。pathSeparator是File类中的静态字段,表示路径分隔符,在windows中是“;”(分号)。

	public static void constructorDemo()
	{
		File f1 = new File("c:\\a.txt");
		File f2 = new File("c:\\", "a.txt");
		File f = new File("c:\\");
		File f3 = new File(f, "a.txt");
		File f4 = new File("c:" + File.separatorChar + "a.txt");
		System.out.println(f4);//c:\a.txt
	}


2、常见方法
(1)获取
     1.1 获取文件名称。
     1.2 获取文件路径。
     1.3 获取文件大小。
     1.4 获取文件修改时间。
下图中第4行获取文件的名称,第5行获取文件的绝对路径,第6行获取文件的相对路径,第7行获取文件的大小,第8行获取文件最后一次修改时间,返回毫秒值。

	public static void getDemo()
	{
		File file = new File("demo.txt");
		String name = file.getName();
		String absPath = file.getAbsolutePath();
		String path = file.getPath();
		long len = file.length();
		long time = file.lastModified();
		System.out.println(name);//demo.txt
		System.out.println(absPath);//E:\java workspace\OtherAPI\demo.txt
		System.out.println(path);//demo.txt
		System.out.println(len);//4
		System.out.println(time);//1434104737956
	}

(2)创建和删除

下图中第3行建立文件流对象,并关联文件。第4行使用createNewFile()方法创建一个新文件,返回值是boolean类型,表示如果创建成功就返回true,如果创建失败就返回false。文件和文件夹的创建和输出流不一样,如果文件或文件夹不存在则创建,如果存在则不创建。第6行使用delete()方法删除文件,删除成功返回true,删除失败返回false。如果要删除的文件正在被流操作,那也不能删除成功,返回false。第9行使用mkdir()方法创建一个文件夹"abc",注意,这个方法只能创建单个文件夹,不能创建多级目录的文件夹,创建成功返回true,失败返回false。第10行使用delete()方法删除文件夹,如果文件夹中有文件,就不能删除,而且删除的文件夹不会放在回收站中。要创建多级目录的文件夹要使用mkdirs()方法,如第12行,第13行删除文件夹实际上删除的是文件夹e,因为第11行构造函数中实际关联的是文件夹e,之前的都是目录。

	public static void createAndDeleteDemo() throws IOException
	{
		File file = new File("file.txt");
//		boolean b = file.createNewFile();
//		System.out.println("b = " + b);
//		boolean b = file.delete();
//		System.out.println("b = " + b);
//		File dir = new File("abc");
//		System.out.println(dir.mkdir());//只创建单个文件夹,不能创建多级目录的文件夹
//		System.out.println(dir.delete());//如果文件夹中有文件,就不能删除。删除的文件夹不会在回收站中
		File dirs = new File("a\\b\\c\\d\\e");
		System.out.println(dirs.mkdirs());//true
		System.out.println(dirs.delete());//true
	}

(3)判断

下图中第4行用exists()方法判断文件是否存在,第5行用isFile()判断是否为文件。如果文件不存在时,返回的也是false。第6行用isDirectory()方法判断是否为目录。

	public static void isDemo()
	{
		File file1 = new File("demo.txt");
		System.out.println(file1.exists());//true
		System.out.println(file1.isFile());//true
		System.out.println(file1.isDirectory());//false
	}

(4)重命名

下图中调用renameTo()方法,将文件0.txt重命名为1.txt,也可以把指定命名后的文件的所在路径,比如d:\\1.txt,这样重命名后,原来e:\\0.txt 就会消失,而出现在d盘下1.txt。

	public static void renameToDemo()
	{
		File f1 = new File("e:\\0.txt");
		File f2 = new File("e:\\1.txt");
		f1.renameTo(f2);
	}
(5)系统根目录和容量

下图中第3行调用File的静态方法listRoots(),返回系统更目录,放在一个File对象数组中,输出时会看到所有系统的根目录。第14行中,调用的方法获得指定目录的空闲空间,第15行获取的是总空间。

	public static void listRootsDemo() 
	{
		File[] files = File.listRoots();
		for(File file : files)
		{
			System.out.println(file);
		}
		/*输出
		 * 	C:\
			D:\
			E:\
			F:\
			G:\*/
		File f = new File("d:\\");
		System.out.println("空闲空间:" + f.getFreeSpace());//
		System.out.println("总空间:" + f.getTotalSpace());//
	}
(6)获取目录内容

下图中第4行用list()方法,获取当前目录下的文件以及文件夹的名称,包括隐藏文件。注意:调用list方法的File对象中封装的必须是目录,否则会发生NullPointerException,因为String数组根本就没有创建成功。如果访问系统级目录,也会发生空指针异常。如果目录存在,但是没有内容,会返回一个数组,但是长度为0。

	public static void listDemo()
	{
		File file = new File("d:\\");
		String[] names = file.list();
		for(String name : names)
		{
			System.out.println(name);
		}
	}

(7)过滤器

如果使用list()方法只要获取指定的文件,就要使用过滤器。如下图11-18行,定义一个类FilterByJava,实现了过滤器接口FilenameFilter,这个接口中只有一个方法就是accept,我们必须重写改方法。参数中dir是文件的路径,name是文件名。只有满足条件的文件才返回true,否则返回false。第4行就使用list的重载函数,传递过滤器对象作为市场,返回指定条件的文件名称。其实过滤器的实现就是先调用list,把该目录下的所有文件名都放在一个容器中,然后在逐个判断是否满足条件,最后把满足条件的文件名返回。

	public static void listDemo1()
	{
		File file = new File("e:\\");
		String[] names = file.list(new FilterByJava());
		for(String name : names)
		{
			System.out.println(name);
		}
	}

	public class FilterByJava implements FilenameFilter 
	{
		public boolean accept(File dir, String name)
		{
	
			return name.endsWith(".java");
		}
	}








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章