黑马程序员—IO基础应用II

File类

用来将文件或者文件夹封装成对象。
方便对文件与文件夹的属性信息进行操作 。
File对象可以作为参数传递给流的构造函数。

File类常见方法:
1.创建:
boolean createNewFile():
       在指定位置创建文件,如果该文件已经存在,则不创建,返回false。
       和输出流不一样,输出流对象一建立创建文件。而且文件已经存在,会覆盖。
 boolean mkdirs():创建多级文件夹。

2.删除:
 boolean delete():删除失败返回false。如果文件正在被使用,则删除不了返回falsel。
 void deleteOnExit();在程序退出时删除指定文件。

3.判断:
 boolean exists() :文件是否存在.
 isFile():是否是文件
 isDirectory();是否是目录
 isHidden();是否隐藏

 4.获取信息:
 getName():获取名称
 getPath():获取路径
 getAbsolutePath() ;获取绝对路径
 long lastModified() ;获取最后修改时间
 long length() ;获取体积大小

5.其他:
renameTo();改名,重命名,如果修改路径的话,同时路径也会修改
listRoots();返回 File 数组,列出可用的文件系统根(盘符)
list():返回当前目录下所有文件,包括子目录
listFiles();返回当前路径下的文件对象。(不包括子目录)

示例代码:显示.bmp结尾的文件

     File dir=new File("abc");
     String[] namess=f.list(new FilenameFileter()
           public boolean accept(File dir,String name)
               {
                  return name.endsWith(".bmp");
               }
     );
     for(String f: names)
     {
              sop(f);
     }
递归

函数自己调用自己。
注意:递归时一定要明确结束条件。

应用场景:当某一功能要重复使用时。

递归要注意:
1.限定条件。
2.要注意递归的次数。尽量避免内存溢出。

示例代码:列出指定目录下文件或者文件夹,包含子目录中的内容。

import java.io.*;

class FileDemo 
{
	public static void main(String[] args) 
	{
		File dir = new File("d:\\testdir");
		showDir(dir,0);                                                                                               	}
	public static String getLevel(int level)
	{
		StringBuilder sb = new StringBuilder();
		sb.append("|--");
		for(int x=0; x<level; x++)
		{                                                                                         			               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]);
		}
	}
}

代码:删除一个带内容的目录。

删除原理:
在window中,删除目录从里面往外删除的。
既然是从里往外删除。就需要用到递归。

import java.io.*;
class  RemoveDir
{
	public static void main(String[] args) 
	{
		File dir = new File("d:\\testdir");
		removeDir(dir);
	}
	public static void removeDir(File dir)
	{
		File[] files = dir.listFiles();
		for(int x=0; x<files.length; x++)
		{
			if(files[x].isDirectory())
				removeDir(files[x]);
			else
				System.out.println(files[x].toString()+":-file-:"+files[x].delete());
		}
		System.out.println(dir+"::dir::"+dir.delete());
	}

}

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

import java.io.*;
import java.util.*;
class  JavaFileList
{
	public static void main(String[] args) throws IOException
	{
		
		File dir = new File("d:\\javatest");
		List<File> list = new ArrayList<File>();
		fileToList(dir,list);
		File file = new File(dir,"javalist.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)throws IOException
	{
		BufferedWriter bufw = new BufferedWriter(new FileWriter(javaListFile));
		for(File f : list)
		{
                           String path = f.getAbsolutePath();
                           bufw.write(path);
                           bufw.newLine();
                           bufw.flush();
                  }							                                         	         bufw.close();
	}
}
类Properties

Properties是hashtable的子类。
也就是说它具备map集合的特点。而且它里面存储的键值对都是字符串。
是集合中和IO技术相结合的集合容器。
该对象的特点:可以用于键值对形式的配置文件。
那么在加载数据时,需要数据有固定格式:键=值。

代码:限制程序运行次数。当运行次数到达5次时,给出,请您注册的提示。并不再让该程序执行。

import java.io.*;
import java.util.*;
class  RunCount
{
	public static void main(String[] args) throws IOException
	{
		Properties prop = new Properties();
		File file = new File("count.ini");
		if(!file.exists())
		file.createNewFile();
		FileInputStream fis = new FileInputStream(file);
		prop.load(fis);
		int count = 0;
		String value = prop.getProperty("time");
		if(value!=null)
		{
			count = Integer.parseInt(value);
			if(count>=5)
			{
				System.out.println("再次使用请注册!");
				return ;
			}
		}
		count++;
		prop.setProperty("time",count+"");
		FileOutputStream fos = new FileOutputStream(file);
		prop.store(fos,"");
		fos.close();
		fis.close();
		}
}
打印流

该流提供了打印方法,可以将各种数据类型的数据都原样打印。
字节打印流:PrintStream
构造函数可以接收的参数类型:
1.file对象。File
2.字符串路径。String
3.字节输出流。OutputStream
字符打印流:PrintWriter
构造函数可以接收的参数类型:
1.file对象。File
2.字符串路径。String
3.字节输出流。OutputStream
4.字符输出流,Writer。

示例代码:

class  PrintStreamDemo
{
	public static void main(String[] args) throws IOException
	{
		BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
		PrintWriter out = new PrintWriter(new FileWriter("a.txt"),true);
		String line = null;
		while((line=bufr.readLine())!=null)
		{
			if("over".equals(line))
				break;
			out.println(line.toUpperCase());
		}
		out.close();
		bufr.close();
	}	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值