黑马程序员-File类

File类:

将文件或文件夹封装成对象。

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

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

流不能操作的文件夹,不能操作文件的属性信息,流只能操作数据。

      
字段摘要:static String separator

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

  构造函数:

File(File parent, String child)
:将目录名和文件名分开。可以使文件名变成变量。

作为变量参数使用。

例:File f1 = new
File("D:","00"+File.separator+"f.txt");

File方法。

创建:

createNewFile(),文件已存在不创建并返回false.

creatTemFile(String,String):前缀名和后缀名(如.temp)

creatTemFiel(String,String,StringDir);可以指定路径名,想恶心百度。

创建目录:

mkdir();这破名子起的!!

删除:

delete:删除文件。

void
deleteOnExit():在虚拟机退出的时候,删除。因为有时候出现异常,代码跳转,执行不到删除功能,即使放在finally里也不行(执行中的代码无法删除)。
一般临时文件用

判断:

canExcute():是否可执行。()没有createNewFile之前不可以执行

int compareTo(File pathname) 比较文件名。

exists:是否存在。

isFile:是否是文件 ,常用,在判断是否是文件或目录时,一定要判断是否存在,要严谨。

ifDirectory:是否是目录

isHiddem:是否隐藏。隐藏文件java访问不了。

isAbsolute:是否是绝对路径  *

获取信息:

getPath

getAbsolutePath  返回字符串

getAbsoluteFile 返回file

getName

length:返回long类型,比读取流的avalible更大。

特殊:getparent:返回父目录字符串形式 
如果没有明确指定上一次父目录,则返回null

如果是相相对路径,则返回null,如果相对路径有上一次目录,则不为null

getParentFile:返回file对象

long
lastModified()  :返回前一次修改的时间。查看是否被别人修改过

文件覆盖的原理:先判断文件是否存在,再删除。先删后创建。

特殊:    boolean
renameTo(File dest) 传入的参数是file

static File[] listRoots() ;返回的是数组

列出可用的文件系统根。即所有的盘符。

应用:在存储文件时,最好先列出用户的盘符

      
 
注意重要:

2.0 f1.list():返回String[]
,调用list的对象f1必须封装了一个目录,该目录还必须存在

列出全部目录和全部文件, 包括隐藏文件

2.1 list(FilenameFilter
filter);文件名过滤

返回符合过滤器的文件或文件名  String[]

accept():boolean accept(File dir, String name)

应用:列出某个文件下的所有.txt文件。但是只能应用一级目录,列出所有要用到递归。

例子:

String[] names2 = f2.list(new FilenameFilter(){

public boolean accept(File f2,String str){//复写方法

System.out.println("str....."+str);//str就是f2中的所有文件,所以可以用str来判断。

return str.endsWith(".txt");//只保留.txt文件。

}

});

3.1 listFiles():返回指定目录下的文件名。

3.2 listFiles(FilenameFilter
filter);

3.3 listFiles(FileFilter
filter);

--指定文件或文件名,其余全过滤掉。FileFilter接口,一个accept方法。

boolean
accept(File pathname)  ;注意返回值d

例子:

File f3  = new File("d:\\");

File[] files3 = f3.listFiles(new FilenameFilter(){

public boolean accept(File f3,String name){

return name.endsWith(".txt");//只有当返回值问true是才会,路径名才满足过滤器。

//返回值为null.

//     return false;

}

});

注:

1.list和listFiles的区别:返回值不一样,返回的file对象还可以在获取或判断等。listFiles方法更好。

2. 过滤可以获取一个目录下的.txt文件.递归也可以.有什么区别?过滤好像只能获取制定的目录而无法继续递归下一级目录.

递归:

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

函数自身调用自身,称为递归。

      
递归要注意:

1.限定条件,不要陷入无限递归。

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

3.递归中最好不要出现new对象。

练习1:练习:列出D盘下的所有文件的名称。文件夹中还有文件夹,

则继续在遍历,如果还是文件夹....,直到是文件

练习2:不用过滤器能列出指定的文件名吗,如.map3.

写的正规点。

思路:1.对指定的目录进行递归。

2.递归时列出文件的路径

3.将路径名称存到集合中(缓冲一个,存集合中既可以打印也可以写入文件中)

4.将集合中的数据写入文件中。由内存到硬盘中)专业:数据的持久化

练习3;

删除一个带内容的目录。

删除原理:在windows中,删除目录从里往外删,java删除不走回收站。

在删除完文件后,记得将整个文件夹删除.

练习4:如何将该流中的数据读取到集合中,并进行操作,在存储到文件中。

思路:

1.用一个流与info.txt文件关联

2. load加载进property中。

3. 使用store或list保存

练习5:用于记录应用程序运行次数。

如果达到使用次数,那么给出注册提示。

思考:很容易想到计数器,但是程序退出,计数器变

在内存中消失了。下一次启动时,又从0开始计数。

我们的需求:下次程序启动时会先加载计数器并加1后,在存储。

所以建立一个配置文件(以键值对形式存在),用于记录该软件的使用系数。

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

map + io --> properties

建立配置文件

操作配置文件

保存配置文件

Properties:是Hashtable的子类。是IO与集合的结合容器,里面的键值对都是字符串形式。

用处:用于键值对形式的配置文件。

方法:

getPropertied(key)

list(PrintStream):属性列表输出到流中 
与保存相似

load(InputStream):从流中读取属性,流可以关联文件

setPropertity(key,value)

store(OutputStream,String
comments);将属性列表写到OutputStream流中。comments:自定义评论

Set<String>
stringPropertyNames()

list:输出到流中(相当于配置文件)写入流

load:配置文件(流)加载进集合(即从配置文件中读取)
读取流

打印流:PrintWrite与PrintStream :可以直接操作输入流和文件

PrintStream
除了输出流的基本功能外,还可以将各种数据类型的数据都原样的打印。1.0

解释:PrintStream本身是OutputStream的一个子类,不仅具备write等功能,

还可以直接打印基本数据类型和对象。println(String x)

造函数可以接受的类型:

1.file对象。File

2.字符串路径。String

3.字节输出流。outputStream(包括System.out)

的PrintStream(File file)
可以直接操作文件,能操作文件的流都很重要

创建具有指定文件且不带自动行刷新的新打印流。

printWriter:具备printStream的功能,并且还增强了。1.1

Writer的子类。

造函数可以接受的类型:

1.file对象。File

2.字符串路径。String

3.字节输出流。OutputStream(包括System.out)

4.字符输出流。Writer

合并流SequenceInputStream:InputStream的子类。

将其他输入流串联起来,一个流读完,在读下一个.....。

构造函数:接收类型:文件,字符串路径名,outputStream,Writer

应用:多个流存到一个目的中,需要多次与目的文件进行关联。麻烦。可以将多个流整合成一个流。

方法:read,read(byte[] off,len) 
*

      
 
构造函数:

1.SequenceInputStream(Enumeration<?extends InputStream> e);

2.SequenceInputStream(InputStream
s1,InputStream s2);只能传入2个流。

接口:Enumertation:枚举,相当于Vector的迭代器。方法:hasMoreElements(),nextElement() 
*

Enumeration<E>
elements()   返回此向量的组件的枚举。

注:enum是抽象类,两者不同

切割文件。一个读取流对应多个输出流。类似分卷压缩。

原理:指定分切割的大小,用一个数组容器。

时间: 2024-10-14 10:16:46

黑马程序员-File类的相关文章

黑马程序员-File类+递归的简单应用

Java File类   Java.io.File Java文件类以抽象的方式代表文件名和目录路径名.该类主要用于文件和目录的创建.文件的查找和文件的删除等. File对象代表磁盘中实际存在的文件和目录.通过以下构造方法创建一个File对象. 通过给定的父抽象路径名和子路径名字符串创建一个新的File实例. File(File parent, String child); 通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例. File(String pathname) 根据 pa

黑马程序员——File类

1.File类用来将文件或者文件夹封装成对象  方便对文件架的属性信息进行操作  File对象可以作为参数传给流的构造函数 将已有的或者未出现的文件或者文件夹封装成对象   File类有一个静态属性separator,表示与系统有关的目录分隔符,以字符串表示 2.File类的常见方法  1.创建     boolen createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false          和输出流不一样,输出流对象已建立就创建文件,如果文件存在,会覆盖

黑马程序员_File类与递归

一.概述: 1.File类:在整个IO包中与文件本身有关的操作类,所有的与文件本身有关指的是创建.删除文件等操作.在java.io包中的File类本身是一个跨平台的文件操作类,所以在操作中要更多的考虑到各个操作系统的区别. 2.特点: 1)用来将文件或文件夹封装成对象 2)方便于对文件与文件夹的属性信息进行操作 3)File对象可以作为多数传递给流的构造函数 二.常用方法: File类 File 即指文件也指文件夹. File类构造方法和字段摘要 staticString pathSeparat

黑马程序员——JAVAString类学习总结

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- www.itheima.com Java中String是一个特殊的包装类数据有两种创建形式: String s = "abc"; String s = new String("abc"); 第一种先在栈中创建一个对String类的对象引用变量s,然后去查找"abc"是否被保存在字符串常量池中,如果没有则在栈中创建三个char型的值'a'.'b'

黑马程序员___OC类的加载和初始化

构造方法 完整的创建一个可用的对象需要两步 1.分配储存空间   +alloc 2.初始化   -init Person *p1 = [Person alloc] Person *p2 = [p1 init] 相当于:Person *p = [Person new] ,但是这个方法虽然可以快速创建一个新的对象,但是不能对新对象进行有选择的初始化 有时候我们想创建的对象都有一个初始值,这个时候就可以重写构造方法 - (id)init { //一定要调用回super的init方法,初始化父类中声明的

黑马程序员——工具类Collections的使用

工具类Collections的使用 import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; public class CollectionsDemos { public static void main(String[] args) { // TODO Auto-generated method stub ArrayList<String> al = new ArrayList

黑马程序员_类对象创建代码的执行顺序测试总结

class StaticCode { // 类的非静态成员变量(实例变量)定义语句: // 作用:用来存储对象的特有数据的成员变量. // 运行:当类对象被创建时就执行,按照顺序自上而下执行,和构造代码块平级.(即当有多个构造函数 // 代码块和多个非静态成员变量时,JVM按照自上而下的顺序来执行所有语句,包括构造代码块里的代码 // 和非静态成员的声明.) // 存储位置:非静态变量位于堆内存中的对象实体中. int num = 3; // 构造代码块 { System.out.println

黑马程序员-OC类的本质,深入探讨,load方法和initialize方法

1:类的本质:类也是一种类,可以叫做类类,类对象,类类型: 2:类和对象在内存中分配问题(注意区分类的对象和类对象的概念) 类对象在内存中只有一份,且只加载一次,类对象中存放了类中定义的方法: 而成员变量和isa指针,存放在了类的对象中;isa指针指向了类对象:如图: 3:类本身也是对象,是class类型的对象: // 以person为例 Person *p1 = [[Person alloc] init]; Person *p1 = [[Person alloc] init]; // 获取类对

黑马程序员---工具类---OC自定义函数---计算当前路径下所有文件的总行数

------iOS培训.Java培训.Android培训, iOS学习型技术博客,期待与您交流------ 计算当前路径下所有文件的总行数 /* 计算当前路径下所有文件的总行数 涉及到NSArray.NSString.NSFileManager */ // 计算当前全路径(文件\文件夹)下所有文件的行数 // 接收参数path:文件的全路径(文件.文件夹) NSUInteger codeLinesCount(NSString *path) { // 1.获得文件管理者    单例模式:整个程序的