黑马程序员技术交流社区

标题: 【成都校区】 [打印本页]

作者: 我想吃鲜锅兔儿    时间: 2018-12-19 21:24
标题: 【成都校区】
File类
先创建File对象 File file = new File();

File类是与系统无关的类,任何操作系统都可以用这些方法
file:文件
directory:文件夹
path:路径

成员变量(静态)
static String pathSeparator 路径分割符,为了方便,它被表示为一个字符串
static char pathSeparatorChar 与系统有关的路径分隔符
windows系统:分号   linux系统:冒号

static String separator 文件名称分割符,为了方便,它被表示为一个字符串
static char separatorChar 与系统有关的默认名称分隔符
windows系统:反斜杠\   linux系统:正斜杠/

操作路径不能写死了
"c:"+File.separator+"aaa"+File.separator+"视频"



路径
绝对路径
相对路径

1.路径不区分大小写
2.路径中的文件名称分隔符windows使用反斜杠,反斜杠是转义字符,两个反斜杠代表一个普通的反斜杠
D:\\User\\itcast\\123.txt
转义符:有些符号不能打印,需要转义  加一个\

构造方法
File(String pathname);通过将给定路径名字字符串转换为抽象路径名来创建一个File实例String pathname:字符串的路径名称
字符串可以以文件结尾,也可以以文件夹结尾
路径可以是相对路径,也可以是绝对路径
路径可以是存在的,也可以是不存在的
创建File对象,只是把路径封装为File对象,不考虑路径真假情况


File(String parent,String child);根据路径名字符串和child路径名字符串创建一个File实例
参数:把路径分为两部分
String parent:父路径
String child:子路径
好处:父路径和子路径,可以单独书写,使用起来非常灵活,父路径和子路径都可以变化

File(File parent,String child);根据parent路径名字符串和child路径名字符串创建一个新的File实例
父路径是File类型,可以使用File的方法对路径进行一些操作,再使用路径创建对象
parent可以传递的是对象

成员方法
获取功能
1.public String getAbsolutePath() :返回此File的绝对路径名字符串。
获取的构造方法中传递的路径
无论路径是绝对的还是相对的,getAbsoluPath方法返回的都是绝对路径
2.public String getPath() :将此File转换为路径名字符串。
        toString就是调用的getPath()方法
3.public String getName() :返回由此File表示的文件或文件夹的名称。
获取的就是构造方法传递路径的结尾部分(文件/文件夹)
4.public long length() :返回由此文件夹表示的文件的大小。
获取的是构造方法指定的文件的大小,以字节为单位
文件夹大小没有概念的,不能获取文件夹的大小
如果构造方法中给出的路径不存在,那么length方法返回0
文件夹输出4096

判断功能
5.public boolean exists() :此File表示的文件或文件夹是否实际存在。
6.public boolean isDirectory() :此File表示的是否为文件夹。
7.public boolean isFile() :此File表示的是否为文件。
    6和7方法使用前提是,File中路径必须存在,否则都返回false

创建、删除功能
8.public boolean createNewFile() :创建一个文件
createNewFile()声明抛出了一个IOException,我们用这个方法需要处理,两种方式
创建文件夹路径不存在时抛出异常
9.public boolean delete() :删除文件或文件夹。文件夹只能删空文件夹

10.public boolean mkdir() :创建一个文件夹。

11.public boolean mkdirs() :创建由此File表示的文件夹,包括任何必需但不存在的父文件夹。
mkdir只能创建单级空文件夹,mkdirs能创建单级和多级空文件夹

文件夹的遍历
12.public String[]     list() :返回一个String数组,返回第一层的所有子文件或文件夹。
13.public File[]       listFiles() :返回一个File数组,返回第一层的所有子文件或文件夹。
list方法和listFile方法遍历的是构造方法中给出的目录
如果构造方法中给出的目录路径不存在,会抛出空指针异常
路径不是一个目录也会抛出空指针异常
也能获取隐藏文件夹


递归

直接递归,间接递归
直接:自己调自己
间接:A方法调B方法,B方法调C方法,C方法调A方法

注意:一定要有条件限定,保证递归能停下来,递归次数也不能太多
构造方法禁止递归

使用前提:当调用方法的时候,方法的主体不变,每次调用方法的参数不同,可以使用递归

递归打印多级目录
创建File对象,listFiles方法返回文件数组
遍历数组获取文件,判断是不是文件,如果是,再(递归)调用方法




过滤器

1.File[] listFile(FileFilter filter);       
   FileFilter接口 :用于抽象路径名(File对象)的过滤器
   用来过滤文件(File对象)
   抽象方法:用来过滤文件的方法
重写accept方法
   boolean accept(FilenameFilter filter)测试指定抽象路径名是否应该包含在某个路径名列表中
2.File[] listFiles(FilenameFilter filter);
   FilenameFilter接口:实现此接口的类实例可用于过滤器文件名
   用来过滤文件的方法
重写accept方法
   boolean accept(File dir,String name);测试指定文件是否应该包含在某一文件列表中
   参数:
   File dir:构造方法中传递发被遍历的目录
   String name:使用ListFiles方法遍历目录,获取的每一个文件/文件夹的名称

两个过滤器接口没有实现类,需要我们自己写实现类,重写accept方法,在方法中自定义过滤规则
过滤的规则:在accept方法中判断File对象是否以xxx(你自己定义的)结尾,是返回true,不是返回false


IO流   输入输出数据流  input  output
1字符=2字节  1个字节=8个二进位

根据数据的流向分为:输入流和输出流。
输入流 :把数据从 其他设备 上读取到 内存 中的流。
输出流 :把数据从 内存 中写出到 其他设备 上的流。
格局数据的类型分为:字节流和字符流。
字节流 :以字节为单位,读写数据的流。
字符流 :以字符为单位,读写数据的流
=======================================
=======================================
OutputStream类 (抽象超类) 字节输出流
创建子类使用
FileOutputStream  文件字节输出流
把内存的数据写入到硬盘的文件中

成员方法
1.public void close() :释放资源
2.public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。
3.public void write(byte[] b) :将 b.length字节从指定的字节数组写入此输出流。
如果写的第一个字节是正数(0-127);那么显示的时候会查询ASCII码表
如果写的第一个字节数负数,那第一个字节会和第二个字节,两个字节组成一个中文显示,查询系统默认码表(GBK)
4.public void write(byte[] b, int off, int len) :把字节数组的一部分写入到文件中,从off索引开始,len:写几个字节
5.public abstract void write(int b) :将指定的字节输出流。
6.写入字符串的方法(String类中的方法) : byte [] getBytes();把字符串转换位字节数组  
byte [] b = "你好"; b.getBytes
===================================
FileOutputStream的构造方法
1.public FileOutputStream(File file) :创建文件输出流以写入由指定的 File对象表示的文件。
2. public FileOutputStream(String name) : 创建文件输出流以指定的名称写入文件。
参数:写入数据的目的
String name:目的地是一个文件的路径
File file:目的地是一个文件
作用:
1.创建一个FileOutputStream对象
2.会根据构造方法中传递的文件/文件路径,创建一个空的文件
3.会把FileOutputStream对象指向创建好的文件

字节输出流的使用步骤:  将数据输出到文件中
1.创建一个FileOutputStream对象,构造方法中传递写入数据的目的地(路径/文件)
2.调用FileOutputStream对象中的方法write(),把数据写到文件中
3.释放资源
这个方法的三个步骤都声明了异常,要处理
=============================================
============================================
输出流的续写和换行 (构造方法)
1.public FileOutputStream(File file, boolean append) : 创建文件输出流以写入由指定的 File对象表示的 文件。
2.public FileOutputStream(String name, boolean append) : 创建文件输出流以指定的名称写入文件。
参数:String name,File file:写入数据的目的地
         boolean append:追加写开关  true:创建对象不会覆盖原文件,继续在文件的末尾追加写数据                                                  
         false:创建一个新文件,覆盖原文件
换行:换行符  windows:\r\n   linux:/n   mac:/r  都是字符串,要用String的getBytes()方法;
================================
================================
InputStream类 字节输入流(抽象超类)
FileIputStream实现类
把硬盘文件的数据读取到硬盘中使用

成员方法
public abstract int read() : 从输入流读取数据的下一个字节。 没有返回-1
public int read(byte[] b) : 从输入流中读取一些字节数,并将它们存储到字节数组 b中 。
public void close() :释放资源

构造方法
FileInputStream(File file) : 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系 统中的 File对象 file命名。
FileInputStream(String name) : 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件 系统中的路径名 name命名。
当你创建一个流对象时,必须传入一个文件路径。该路径下,如果没有该文件,会抛出 FileNotFoundException 。
参数:File file:被读取的文件
          Strem name:被读取的文件的路径
构造方法的作用:
1.会创建一个FileputStream对象
2.会把FileputStream对象指向构造方法中的要读取的文件

使用步骤:
1.创建FileInputStream对象,构造方法中绑定要读取的数据源
2.使用FileInputStream对象中的read方法,读取文件
3.释放资源

一次读取一个字节,显示全部字节,可以用while循环
int len =0;
while(len =file.read() ! = -1){
sout((char)len);可以转换为字符
}
一次读取多个字节:
用int read(byte [] b)从输入流中读取一定数量的字节,并将其储存在缓冲取数组b中

String类构造方法
String (byte [] bytes):把字节数组转换为字符串
String (byte [] bytes,int off,int length):把字节数组的一部分转换为字符串
offset:数组的开始索引 length:转换的字节个数
使用:
byte [] bytes = new byte[2];设置读取字节个数,用数组储存  如果超出了文件字节个数,也只返回所有的字节
int len = file.red(bytes);读取file文件,读取两个字节
sout(new String(bytes))打印读取的两个字节,转换为字符

一次读取多个字节,显示全部字节,可以用while循环
byte [] bytes = new byte[1024];储存读取到的多个字节
while循环结束添加,读取到-1结束
int len = 0
while((len = file.read(bytes)]) !=-1){  判断是否读取结束
sout(new String(bytes,0,len))  字节数组转换为字符串,只转换字节长度个数的字符串
}
=========================
=========================
文件复制     一读一写
步骤:
1.创建一个字节输入流对象,构造方法中绑定要读取的数据源    FileInputStream
2.创建一个字节输出流对象,构造方法中绑定要写入的目的地    FileOutputStream
3.使用字输入流对象中的read方法读取文件    while()方法,可以用数组来读取更快
4.使用字节输出流对象中的方法write,把读取到的字节写入到目的地的文件中   write()
5.释放资源   先释放输入,再释放输出
=============================================
=============================================
字符流
Reader类 (抽象超类)
FileReader实现类

成员方法
1.public void close() :释放资源   
2.public int read() : 从输入流读取一个字符。
3.public int read(char[] cbuf) :从输入流中读取一些字符,并将它们存储到字符数组 cbuf中 。

构造方法
1.FileReader(File file) : 创建一个新的 FileReader ,传递文件路径。  
2.FileReader(String fileName) : 创建一个新的 FileReader ,传递文件名。
作用:
1.创建一个FileReader对象
2.会吧FileReader对象指向要读取的文件

字符输入流使用步骤:
1.创建FileReader对象,构造方法中绑定要读取的数据源
2.使用FileReader对象中的方法read读取文件
3.释放资源

String类的构造方法:
1.String(char [] value);把字符数组转换为字符串
2.String(char [] value,int offset,int count);把字符数组的一部分转换为字符
offset:数组开始索引  count:转换的个数
sout(new String(字符数组,0,len));
==========================================
==========================================
Write类  (抽象超类)
FileWriter实现类   字符输出流
作用:把内存中字符数据写入到文件中

1.void writer(int c) 写入单个字符。
2.void writer(char[] cbuf) 写入字符数组。
3.abstract  void write(char[] cbuf, int off, int len) 写入字符数组的某一部分,off数组的开始索引,len 写的字符个数。
4.void writer(String str) 写入字符串。
5.void writer(String str, int off, int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个 数。
6.void flush() 刷新该流的缓冲。
7.void close() 关闭此流,但要先刷新它。

构造方法:
1.FileWriter(File file) : 创建一个新的 FileWriter,传入文件。  
2.FileWriter(String fileName) : 创建一个新的 FileWriter,传入路径。

作用:
1.会创建一个FileWriter对象
2.会根据构造方法中传递文件/路径,创建文件
3.会把FileWriter对象指向创造好的文件

字符输出流使用步骤:
1.创建FileWriter对象,构造方法中绑定要写入数据的目的地
2.使用FileWriter中的方法write,把数据写入到内存缓冲区中(字符转换为字节的过程)
3.使用FileWriter中的flush(),把内存缓冲区中的数据,刷新到文件中
4.释放资源(会先把内存缓冲区中数据刷新到文件中)
FileWrite fw = new FileWrite("D:\\AAA\\as.txt");创建对象
char [] c = {'a','中','#','%'};使用字符数组来写入
fw.write(c);
fw.write(c,1,3);c字符数组中,从1索引开始的后三个写入文件
fw.write("今天是个好日子");可以直接写入字符串
fw.write("今天天气不好",1,4);也可以写入的是字符串的一部分,从字符串1号索引到后四位到文件中
fw.close();
==============================
字符流的续写和换行    两个参数的构造方法
续写:FileWrite(String fileName,boolean append);
换行:FileWrite(File file,boolean append)
tring fileName:写入数据的目的地
boolean append:续写开关 true:不会创建新的文件覆盖源文件,可以续写;false:创建新的文件,覆盖原文件
换行:换行符  windows:\r\n   linux:/n   mac:/r  都是字符串,
fw.write("hello,world" + "\r\n");换行
=================================
=================================
用try...catch...finally处理流中的异常
// 声明变量            
FileWriter fw = null;         
try {             
        //创建流对象             
        fw = new FileWriter("fw.txt");             
         // 写出数据             
         fw.write("黑马程序员"); //黑马程序员         
} catch (IOException e) {             
        e.printStackTrace();         
} finally {             
          try {                 
        if (fw != null) {                     
             fw.close();                
                 }             
           } catch (IOException e) {                 
          e.printStackTrace();             
           }         
     }     
  }
}

在最前面设置FileWriter fw = null;
把容易出错的代码放入try中   fw=new FileWrite("D:\\AAA")   fw.write();
在catch中声明IOException异常   打印异常
finally中输出释放资源,释放资源要先判断fw对象是否为空,不为空就直接释放资源,为空catch打印异常信息
=======================================
=======================================
Properties类(集合) extends HashTable<k,v>  implementsMap<k,v>

Properties类表示一个持久的属性集。Properties可保存在流中的或从流中加载
是唯一一个和IO流相结合的集合
可以使用Properties集合中的store()方法,把集合中的临时数据,持久写入到硬盘中
可以使用Properties集合中的lood()方法,把硬盘中保存的文键(键值对),读取到集合中使用
键值对默认都是字符串

成员方法
1.public Object setProperty(String key, String value) : 保存一对属性。
2.public String getProperty(String key) :使用此属性列表中指定的键搜索属性值。 相当于get(key)
3.public Set<String> stringPropertyNames() :所有键的名称的集合,相当于keySet()
遍历方法和HashMap集合一样

public void store(OutputStream out,String comments),把集合中的临时数据,持久化写到硬盘中储存
public void store(Writer writer,String comments)
参数:
OutputStream out:字节输出流,不能写中文
Writer write:字符输出流,可以写中文
Stringcomments:注释,用来解释说明文件保存做什么用的,不能使用中文
使用步骤:
1.创建properters集合对象,添加数据
2.创建字节输出流/字符输出流对象,构造方法中绑定要输出的目的地
3.使用Propreties集合中是方法store,把集合中的临时数据,持久化写入到硬盘中储存
4.释放资源

public void load(InputStream inStream) : 从字节输入流中读取键值对。
public void load(Reader reader)
参数:
InputStream inStream:字节输入流,不能读取含有中文的键值对
Reader reader:字符输入流
使用步骤:
1.创建properters集合对象
2.使用Properties集合对象中的方法load读取保存键值对的文件
3.遍历Properties集合
注意:存储键值对文件中,键与值默认连接可以使用=,空格(其他符号)
2.可以使用#进行注释,备注是的键值对不会被读取
3.键与值默认都是字字符串,不用再加引号






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2