黑马程序员 + 第20天 File

------- android培训java培训、期待与您交流! ----------


day20

1、File:文件和目录路径名的抽象表示形式。

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

static String separator与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。

2File类常见方法

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

boolean mkdir():创建文件夹。

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

2删除

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

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

3判断:boolean exists() 文件是否存在

isFile(); isDirectory(); isHidden(); isAbsolute();

在判断文件对象是否是文件或者目,必须要先判断该文件对象封装的内容是否存在,可以通过exists判断

4获取信息:getName(); getPath();

getParent():该方法返回的是绝对路径中的父目录。如果获取的是相对路径,返回null。如果相对路径中有上一层目录那么该目录就是返回结果。

getAbsolutePath()  long lastModified()  long length() 

public boolean renameTo(File dest):其中dest - 指定文件的新抽象路径名

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

String[] list():返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。调用list方法的file对象必须是封装了一个目录该目录还必须存在

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

接口 FilenameFilter中仅有的一个方法:boolean accept(File dir, String name) :用于测试指定文件是否应该包含在某一文件列表中。

参见FileDemo2.java(匿名内部类调用

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

用法:File dir = new File("c:\\");

  File[] files = dir.listFiles();

      for(File f : files)

  { System.out.println(f.getName()+"::"+f.length()); }

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

递归要注意

1,限定条件。

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

5、删除一个带内容的目录。删除原理:在window中删除目录是从里面往外删除的,用到了递归。java程序删除文件不会经过回收站

boolean delete(): 删除此抽象路径名表示的文件或目录。

6将一个指定目录下的java文件的绝对路径,存储到一个文本文件中,建立一个java文件列表文件。 参见JavaFileList.java

思路

1,对指定的目录进行递归。

2,获取递归过程所有的java文件的路径。

3,将这些路径存储到集合中。

4,将集合中的数据写入到一个文件中。

FileWriter(File file):根据给定的 File 对象构造一个 FileWriter 对象。

FileWriter(String fileName):根据给定的文件名构造一个 FileWriter 对象。(file.toString())

7Properties是Hashtable的子类,它具备map集合的特点,而且它里面存储的键值对都是字符串(不需要泛型)。是集合中和IO技术相结合的集合容器

该对象的特点:可以用于键值对形式的配置文件。那么在加载数据时,需要数据有固定格式:键=值。 参见PropertiesDemo.java

String getProperty(String key):用指定的键在此属性列表中搜索属性。 

Object setProperty(String key, String value):调用 Hashtable 的方法 put。 

Set<String> stringPropertyNames():返回此属性列表中的键集,其中该键及其对应值是字符串,如果在主属性列表中未找到同名键,则还包括默认属性列表中不同的键。(JDK1.6开始) 

void list(PrintStream out):将属性列表输出到指定的输出流。 

void load(InputStream inStream):从输入流中读取属性列表(键和元素对)。 

void load(Reader reader):按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。(JDK1.6开始

void store(OutputStream out, String comments):以适合使用 load(InputStream) 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。 comments - 属性列表的描述,即注释

8建立一个用于记录软件使用次数的配置文件。该配置文件使用键值对的形式,这样便于阅读数据并操作数据。 参见RunCount.java

键值对数据是map集合,数据是以文件形式存储的,使用了io技术。

那么map+io -->properties

配置文件可以实现应用程序数据的共享。

9打印流:该流提供了打印方法,可以将各种数据类型的数据都原样打印。

字节打印流PrintStream,构造函数可以接收的参数类型:

1file对象。File

2,字符串路径。String

3,字节输出流。OutputStream

字符打印流PrintWriter,构造函数可以接收的参数类型:

1file对象。File

2,字符串路径。String

3,字节输出流。OutputStream

4字符输出流Writer

PrintStream(OutputStream out, boolean autoFlush):创建新的打印流自动刷新

void println(String x):打印 String,然后终止该行。

10合并流:SequenceInputStream(多个InputStream-->OutputStream)

SequenceInputStream(Enumeration<? extends InputStream> e):通过记住参数来初始化新创建的 SequenceInputStream,该参数必须是生成运行时类型为 InputStream 对象的 Enumeration 型参数。

SequenceInputStream(InputStream s1, InputStream s2):通过记住这两个参数来初始化新创建的 SequenceInputStream(将按顺序读取这两个参数,先读取 s1,然后读取 s2),以提供从此 SequenceInputStream 读取的字节。

涉及到Enumeration,使用Vector存放文件输入流: 具体参见SequenceDemo.java

Vector<FileInputStream> v = new Vector<FileInputStream>();

v.add(new FileInputStream("c:\\1.txt"));

Enumeration<FileInputStream> en = v.elements();

SequenceInputStream sis = new SequenceInputStream(en);

11、切割文件:1InputStream-->多个OutputStream。参见SplitFile.java

final Iterator<FileInputStream> it = al.iterator();
Enumeration<FileInputStream> en = new Enumeration<FileInputStream>()  //局部匿名内部类
{
	public boolean hasMoreElements()
	{
		return it.hasNext();
	}
	public FileInputStream nextElement()
	{
		return it.next();
	}
};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值