黑马程序员---IO流(File类)

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

 

总结:

流是用来处理数据的,File是文件类型。

 

类 File


用来将文件或者文件夹封装成对象

方便对文件与文件夹的属性信息进行操作 。

File对象可以作为参数传递给流的构造函数。

java.io.File
public class File
  
  
   
   extends 
   
   Object
  
  
  
  
   
   implements 
   
   Serializable, 
   
   Comparable<
   
   File>
  
  
文件和目录路径名的抽象表示形式。

字段摘要
static Stringseparator 
          跨平台目录分隔符。

构造方法摘要
File(File parent,String child)
          根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
File(String pathname)
          通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
File(String parent,String child)
          根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。


import java.io.*;
class FileDemo 
{
	public static void sop(Object obj)
	{
		System.out.println(obj);

	}
	public static void main(String[] args) 
	{
		constractorMethod();
	}

	public static void constractorMethod()
	{
		//三种构造方法:
		File f1 = new File("a.txt");

		File f2 = new File("C:\\abc","a.txt");

		File d = new File("C:\\abc");
		File f3 = new File(d,"b.txt");

		sop("f1:"+f1);
		sop("f2:"+f2);
		sop("f3:"+f3);

		//三种目录分隔符:
		File f4 = new File("C:\\abc\\fff\\tt\\c.txt");
		File f5 = new File("C:/abc/fff/tt/c.txt");
		File f6 = new File("C:"+File.separator+"abc"+File.separator+"fff"+File.separator+"tt"+File.separator+"c.txt");

		sop("f4:"+f4);
		sop("f5:"+f5);
		sop("f6:"+f6);
	}
}


File类的常见方法

1.创建。

boolean createNewFile()  在指定位置创建文件,如果该文件已经存在,则不创建,返回false。
                                       和输出流不一样,输出流对象一建立创建文件。而且文件已经存在,会覆盖。

boolean mkdir(): 创建文件夹。
boolean mkdirs(): 创建多级文件夹

2.删除。

boolean delete() 删除失败返回false。如果文件正在被使用,则删除不了返回false。

void deleteOnExit() 在程序退出时删除指定文件。

3.判断。

boolean exists():文件是否存在。
boolean isFile(): 是否是一个标准文件。
boolean isDirectory(); 是否是一个目录。
boolean isHidden(); 是否是一个隐藏文件。
boolean isAbsolute(); 是否为绝对路径名。

 booleancanExecute()
          测试应用程序是否可以执行此抽象路径名表示的文件。
 booleancanRead()
          测试应用程序是否可以读取此抽象路径名表示的文件。
 booleancanWrite()
          测试应用程序是否可以修改此抽象路径名表示的文件。

4.获取信息。

getName():
getPath():
getParent():

getAbsolutePath()
long lastModified()
long length()

boolean renameTo(File dest) 
                       重命名文件。(可更改盘符,类似于剪切)

class FileDemo 
{
	public static void main(String[] args) throws IOException
	{
		method_5();
	}

	public static void method_5()
	{
		File f1 = new File("c:\\Test.java");
		File f2 = new File("d:\\hahah.java");

		sop("rename:"+f2.renameTo(f1));
	}

	public static void method_4()
	{
		File f = new File("file.txt");

		sop("path:"+f.getPath());
		sop("abspath:"+f.getAbsolutePath());
		sop("parent:"+f.getParent());//该方法返回的是绝对路径中的父目录。如果获取的是相对路径,返回null。
					//如果相对路径中有上一层目录那么该目录就是返回结果。
	}
	
	public static void method_3()throws IOException
	{
		File f = new File("d:\\java1223\\day20\\file2.txt");

		//f.createNewFile();
		//f.mkdir();

		//记住在判断文件对象是否是文件或者目的时,必须要先判断该文件对象封装的内容是否存在。
		//通过exists判断。
		sop("dir:"+f.isDirectory());
		sop("file:"+f.isFile());

		sop(f.isAbsolute());
	}

	public static void method_2()
	{
		File f = new File("file.txt");

		//sop("exists:"+f.exists());

		//sop("execute:"+f.canExecute());

		//创建文件夹
		File dir = new File("abc\\kkk\\a\\a\\dd\\ee\\qq\\aaa");

		sop("mkdir:"+dir.mkdirs());
	}
	
	public static void method_1()throws IOException
	{
		File f = new File("file.txt");
		//sop("create:"+f.createNewFile());
		//sop("delete:"+f.delete());
	}
}



static File[]listRoots()
          列出可用的文件系统根。

import java.io.*;
class FileDemo 
{
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
	public static void main(String[] args) throws IOException
	{
		File[] files = File.listRoots();
		for(File f : files)
		{
			sop(f);
		}
	}
}


 String[]list()
          返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。(名称)

如果目录为空,那么数组也将为空。如果此抽象路径名不表示一个目录,或者发生 I/O 错误,则返回 null

import java.io.*;
class FileDemo 
{
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}

	public static void main(String[] args)
	{
		File f = new File("C:\\");
		String[] names = f.list();//调用list方法的file对象必须是封装了一个目录。该目录还必须存在。
		for(String name : names)
		{
			sop(name);
		}
	}
}



 

 

 String[]list(FilenameFilter filter)
          返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。

String类中的方法:

public boolean endsWith(String suffix)
                    测试此字符串是否以指定的后缀结束。 
参数: suffix - 后缀。
import java.io.*;
class FileDemo 
{
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}

	public static void main(String[] args)
	{
		File dir = new File(".");
		String[] names = dir.list(new FilenameFilter()
		{
			public boolean accept(File dir, String name)
			{
				return name.endsWith(".java");
			}
		});
		sop("len="+names.length);
		for(String name : names)
		{
			sop(name);
		}
	}
}


File[]listFiles()
          返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件和目录。(实体)

import java.io.*;
class FileDemo 
{
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}

	public static void main(String[] args)
	{
		File f = new File(".");
		File[] files = f.listFiles();
		for(File file : files)
		{
			sop(file.getName()+"-----文件大小:"+file.length()+"------文件绝对路径:"+file.getAbsolutePath());
		}
	}
}




 File[]listFiles(FilenameFilter filter)
          返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录

import java.io.*;
class FileDemo 
{
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}

	public static void main(String[] args)
	{
		File f = new File(".");
		File[] files = f.listFiles(new FilenameFilter()
		{
			public boolean accept(File dir, String name)
			{
				return name.endsWith(".java");
			}
		});
		sop("len="+files.length);
		for(File file : files)
		{
			sop(file.getName()+"-----文件大小:"+file.length()+"------文件绝对路径:"+file.getAbsolutePath());
		}
	}
}




File[]listFiles(FileFilter filter)
          返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。

import java.io.*;
class FileDemo 
{
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}

	public static void main(String[] args)
	{
		File f = new File("myhelp");
		File[] files = f.listFiles(new FileFilter()
		{
			public boolean accept(File dir)
			{
				return dir.exists();
			}
		});
		sop("len="+files.length);
		for(File file : files)
		{
			sop(file.getName()+"-----文件大小:"+file.length()+"------文件绝对路径:"+file.getAbsolutePath());
		}
	}
}



 

列出目录下包括子目录的所有内容---递归:

列出指定目录下文件或者文件夹,包含子目录中的内容。
也就是列出指定目录下所有内容。

因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可。
在列出过程中出现的还是目录的话,还可以再次调用本功能。
也就是函数自身调用自身。
这种表现形式,或者编程手法,称为递归。

递归要注意:
1,限定条件。

2,要注意递归的次数。尽量避免内存溢出。

import java.io.*;
class FileDemo 
{
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}

	public static void main(String[] args)
	{
		filesRecursion(new File("."));
	}

	public static void filesRecursion(File f)
	{
		File[] files = f.listFiles();
		for(File file : files)
		{
			sop(file);
			if(file.isDirectory() && !(file.isHidden()))
			{
				filesRecursion(file);
			}			
		}
	}
}





列出目录下所有内容---带层次:

import java.io.*;
class FileDemo 
{
	public static void main(String[] args) 
	{
		File dir = new File(".");
		showDir(dir,0);
	}
	public static String getLevel(int level)
	{
		StringBuilder sb = new StringBuilder();
		sb.append("|--");
		for(int x=0; x<level; x++)
		{
			//sb.append("|--");
			sb.insert(0,"|  ");

		}
		return sb.toString();
	}
	public static void showDir(File dir,int level)
	{
		
		System.out.println(getLevel(level)+dir.getName());

		level++;
		File[] files = dir.listFiles();
		for(int x=0; x<files.length; x++)
		{
			if(files[x].isDirectory())
				showDir(files[x],level);
			else
				System.out.println(getLevel(level)+files[x]);
		}
	}
}



 

删除带内容的目录: 

删除原理:(和windows下对一个文件右键删除是一个功能)

在window中,删除目录从里面往外删除的。

既然是从里往外删除。就需要用到递归

import java.io.*;
class RemoveDir 
{
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}

	public static void main(String[] args) 
	{
		removeDir(new File("D:\\java1201"));
	}

	public static void removeDir(File dir)
	{
		//首先遍历整个目录所有文件和文件夹
		File[] files = dir.listFiles();
		for(File file : files)
		{
			if(file.isDirectory())
			{
				removeDir(file);
			}
			else
				sop(file+"        /***删除-file-***/  "+file.delete());
		}
		sop(dir+"        /***删除-dir-***/  "+dir.delete());

		//第二步:把打印文件换成打印删除结果。
	}
}

 

 创建Java文件列表:

将一个指定目录下的java文件的绝对路径,存储到一个文本文件中。
建立一个java文件列表文件。
思路:
1,对指定的目录进行递归。
2,获取递归过程所以的java文件的路径。
3,将这些路径存储到集合中。
4,将集合中的数据写入到一个文件中。

import java.io.*;
import java.util.*;
class JavaFileList
{
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}

	public static void main(String[] args)
	{
		File dir = new File("E:\\java1201");
		List<File> list = new ArrayList<File>();
		fileToList(dir,list);
		//sop(list.size());
		File file = new File(dir,"javaListFile.txt");
		writeToFile(list,file.toString());
	}

	public static void fileToList(File dir, List<File> list)
	{
		File[] files = dir.listFiles();
		for(File file : files)
		{
			if(file.isDirectory())
			{
				fileToList(file,list);
			}
			else if(file.getName().endsWith(".java"))
			{
				list.add(file);
			}
		}
	}

	public static void writeToFile(List<File> list, String javaListFile)
	{
		//目的:纯文本:FileWriter,提高效率:BufferedWriter
		BufferedWriter bw = null;
		try
		{
			bw = new BufferedWriter(new FileWriter(javaListFile));
			/*
			Iterator<File> it = list.iterator();
			while(it.hasNext())
			{
				bw.write(it.next().getAbsolutePath());
				bw.newLine();
				bw.flush();
			}
			*/
			for(File f : list)
			{
				bw.write(f.getAbsolutePath());
				bw.newLine();
				bw.flush();
			}
		}
		catch (IOException e)
		{
			throw new RuntimeException("读写文件失败");
		}
		finally
		{
			try
			{
				if(bw!=null)
					bw.close();
			}
			catch (IOException e)
			{
				throw new RuntimeException("关闭输出流失败");
			}
		}
	}
}

 


---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值