黑马程序员--File类

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一File类作用 

1、用来将文件或者文件夹封装成对象 2、方便对文件与文件夹进行操作 3、File对象可以作为参数传递给流的构造函数。 
4、了解File类中的常用方法。

创建方式:

1创建一个当前路径的文件:File file=new File("a.txt");

2File d=new File(“c:\\abc");

File f=new File(d,"c.txt");

3File f2=new File("c\\abc\\c.txt");

二方法:

1创建

createNewFile();在指定路径创建文件,如果文件已经存在,则不创建,返回false,这个跟IO中输出流不同,文件不再输出流会创建,在的话就覆盖。在创建文件时要先判断文件是否存在,不存在则创建。

mkdir():创建一级文件夹
mkdirs():创建多级文件夹
调用该类的一个方法createNewFile(),但是在实际操作中需要注意一些事项,如判断文件是否存在,以及如何向新建文件中写入数据等。
2删除
delete():删除失败返回false,文件正在使用删除不了也返回false,在Windows中,删除目录的话里面如果还有文件要先删除掉里面的再删除外面的。系统中如果有隐藏文件文件夹也会被删除,所以可以在删除前可以进行isHidden判断。但是在进行删除整个文件夹的时候里面隐藏的文件文件夹不删除,外面的文件夹是删不了的,这个要注意。
void deleteOnExit():程序退出时删除文件
3判断
exists():判断文件是否存在
isFile()
isDirectory()
isHidden()
isAbsolute()
4获取信息
list() 列出目录下所有文件和文件夹包括隐藏的,以String[]数组返回
listFiles() 列出目录下所有文件和文件夹包括隐藏的,以File[]数组返回
list(FilenameFilter)以过滤器的形式对列出来的文件进行过滤,以String[]数组返回
listFiles(FilenameFilter)以过滤器的形式对列出来的文件进行过滤,以File[]数组返回
getName()
getPahth()
getAbsoluteFile()//获取绝对路径封装成文件对象
getAbsolutPath()//获取绝对路径
getParent()
lastModified()
length()
getParent()//该方法返回的是绝对路径中的父目录,如果获取的是相对路径,返回null.
//如果相对路径中有一级目录,那么该目录就是返回结果
renameTo()

三代码练习

练习1:File对象的建立及简单方法

<span style="font-family:SimSun;font-size:14px;">public static void main(String[] arg)
	{
		File file1=new File("d:"+File.separator+"abc");
		File file2=new File(file1,"ac.txt");
		File file3=new File("am.txt");
		System.out.println(file1);
		System.out.println(file2);
		System.out.println(file3);
		try
		{
			System.out.println(file3.createNewFile());
		}
		catch (IOException e)
		{
		}
		
		System.out.println(file1.mkdir());
		System.out.println(file2.getName());
		System.out.println(file2.getPath());
		System.out.println(file2.getParent());</span>
2获取系统目录

<span style="font-family:SimSun;font-size:14px;">public static void main(String[] arg)
	{
		/*File[] files=File.listRoots();
		for (File f: files)
		{
			System.out.println(f);
		}
		*/
		File file1=new File("c://");
		String[] arr=file1.list();
		for (String s:arr )
		{
			System.out.println(s);
		}</span>

3.练习过滤指定目录的文件:保留.bmp文件

<span style="font-family:SimSun;font-size:14px;">public static void main(String[] arg)
	{
		File f2=new File("d://java//day20");
		boolean boo1=f2.exists();
		boolean boo2=f2.isDirectory();
		if (boo1==false|| boo2==false)
		{
			throw new RuntimeException("该文件不存在");
		}
		File[] acc=f2.listFiles(new FilenameFilter()
		{
			public boolean accept(File dir,String name)
			{
				return name.endsWith(".java");
			}
		});
		for (File b:acc )
		{
			sop(b);
		}
	}
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}</span>

4列出指定文件的文件,目录及子目录

<span style="font-family:SimSun;font-size:14px;">public static void main(String[] arg)
	{
		File f2=new File("d://java");
		run(f2,0);
		
	}
	public static String level1(int count)
	{
		StringBuilder sb=new StringBuilder();
		
		for (int x=0;x<=count ;x++ )
		{
			sb.append("|....");
		}
		return sb.toString();

	}
	public static void run(File f,int count)
	{
		System.out.println(level1(count)+f.getName());
		File[] arr=f.listFiles();
		count++;
		for (int x=0;x<arr.length ;x++ )
		{
			if (arr[x].isDirectory())
			{
				run(arr[x],count);
			}
			else
				System.out.println(level1(count)+arr[x]);
		}
	}</span>

5递归练习。求1到100的和

<span style="font-family:SimSun;font-size:14px;">public static void main(String[] arg)
	{
		System.out.println(diGui(100));
		
	}
	public static int diGui(int n)
	{
		if (n==1)
		{
			return 1;
		}
		int sum=n+diGui(n-1);
		return sum;</span>

6删除一个带内容的目录

<span style="font-family:SimSun;font-size:14px;">public static void main(String[] args)
	{
		File f2=new File("d://xianjian1");
		delete1(f2);
	}
	public static void delete1(File f2)
	{
		File[] arr=f2.listFiles();
		for (int x=0; x<arr.length; x++)
		{
			if (arr[x].isDirectory())
			{
				delete1(arr[x]);
			}
			else 
				System.out.println(arr[x].toString()+".,,....:"+arr[x].delete());
		}
		System.out.println("dir"+f2.delete());
	}
</span>

7将一个指定目录下的java文件的绝对路径,存储到一个文本文件中,建立一个java文件列表文件

<span style="font-family:SimSun;font-size:14px;">	public static void main(String[] arg) throws IOException
	{
		File f2=new File("D://day18");
		List<File> list=new ArrayList<File>();
		bianLi(f2,list);
		File f3=new File(f2,"wang.txt");
		toText(list,f3.toString());

	}
	public static void toText(List<File> list,String acc) throws IOException 
	{
		BufferedWriter sw=new BufferedWriter(new FileWriter(acc));
		for (File a:list )
		{
			sw.write(a.getAbsolutePath());
			sw.newLine();
			sw.flush();
		}
		sw.close();
	}
	public static void bianLi(File f2,List<File> list)
	{
		File[] arr=f2.listFiles();
		for (File e:arr )
		{
			if (e.isDirectory())
			{
				bianLi(e,list);
			}
			else
			{
				if (e.toString().endsWith(".java"))
				{
					list.add(e);
				}
			}

		}
	}</span>

8.想要将info.txt中的键值数据存到集合中进行操作

<span style="font-family:SimSun;font-size:14px;">Properties prop=new Properties();
		FileInputStream fis=new FileInputStream("mmm.txt");
		prop.load(fis);
		prop.setProperty("zhangsan","88");
		FileOutputStream fos =new FileOutputStream("mmm.txt");
		prop.store(fos,"hah");
		//prop.list(System.out);
		fis.close();
		fos.close();</span>

9编程:用于记录应用程序运行的次数

<span style="font-family:SimSun;font-size:14px;">File f=new File("ddd.txt");
		Properties prop=new Properties();
		if (!f.exists())
			f.createNewFile();
		
		FileInputStream fis=new FileInputStream(f);
		prop.load(fis);
		String value=prop.getProperty("time");
		int count=0;
		if (value!=null)
		{
			count=Integer.parseInt(value);
			if (count>5)
			{
				System.out.println("该付钱了");
			}
		}
		count++;
		
		prop.setProperty("time",count+"");
		FileOutputStream fos=new FileOutputStream(f);
		prop.store(fos,"hah");
		fis.close();
		fos.close();
	}</span>

10打印流的联系,把键盘输入变成大写后打印到屏幕上

<span style="font-family:SimSun;font-size:14px;">BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		PrintWriter ps=new PrintWriter(System.out);
		String ss=null;
		while ((ss=br.readLine())!=null)
		{
			/*if ("over".equals(ss))
			{
				break;
			}
			*/
			ps.println(ss.toUpperCase());
			ps.flush();
			br.close();
			ps.close();
		}</span>

11利用sequenceInputStream.将多个文件合并

<span style="font-family:SimSun;font-size:14px;">Vector<FileInputStream > v=new Vector<FileInputStream>();
		v.add(new FileInputStream("11.txt"));
		v.add(new FileInputStream("22.txt"));
		v.add(new FileInputStream("33.txt"));
		v.add(new FileInputStream("44.txt"));
		Enumeration<FileInputStream > e=v.elements();
		SequenceInputStream sis=new SequenceInputStream(e);
		FileOutputStream fos=new FileOutputStream("55.txt");
		byte[] buf=new byte[1024];
		int len=0;
		while ((len=sis.read(buf))!=-1)
		{
			fos.write(buf,0,len);
		}
		fos.close();
		sis.close();
</span>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值