第一章File类
1.1 概述
java.io.File类是文件和目录路径名的抽象表示,主要用于文件和目录的创建,查找和删除等操作。
java把电脑中的文件和文件夹(目录)封装成了一个File类,我们可以使用File类对文件和文件夹进行操作
- 创建,删除,获取,判断,遍历, 获取文件的大小
File类是一个与系统无关的类,任何的操作系统都可以使用这个类中方法
1.2 构造方法
- public File (String pathname):通过将给定的路径名字符串转换为抽象路径名来创建新的File实例
- public File (String parent,String child):从父路径名字符串和子路径名字符串创建新的File实例
- public File (File parent,String child):从父抽象路径名和子路径名字符串创建新的File实例
1.3 File中的静态成员变量
String=" "+char 所以上面两组的结果都是一样的
1.4常用方法
获取功能的方法
- public String getAbsolutePath():返回此File的绝对路径字符串
- public String getPath():将此File转换为路径名字符串
- public String getName():返回由此File表示的文件或目录的名称。
- public long length():返回由此File表示的文件的长度
toString源码调用的就是getPath方法
判断功能的方法
- public boolean exists():此File表示的文件或目录是否存在
- public boolean isDirectory():此File表示是否为目录
- public boolean isFile():此File表示是否是文件
创建删除功能的方法
- public boolean creatNewFile():当且仅当具有该名称文件不存在时,创建一个此名称的新文件
- public boolean delete():删除由此File表示的文件或目录
- public boolean mkdir():创建由此File表示的目录
- public boolean mkdirs():创建由此File表示的目录,包括任何需要但不存在的父目录
1.5 目录的遍历
- public String[] list ():返回一个String类型数组,表示该File目录中的所有文件或目录
- public File[] listFiles():返回一个File数组,表示该File目录中的所有子文件或目录
注意:
1. list方法和listFile方法遍历的是构造方法中给出的目录
2. 如果构造方法中给出的目录不存在,则会抛出空指针异常
3. 如果构造方法中给出的路径不是一个目录,也会抛出空指针异常
在File类中也有两个重写listFiles方法的接口,参数是(FileFilter filter)和(FileName filter)用来过滤文件
注意:
两个过滤接口没有实现类,需要自己写实现类,重写过滤方法accept,在方法中自己定义过滤的规则
第二章IO流
JAVA中I/O操作主要是指使用java.io包下的内容,进行输入输出操作。输入也叫做读取数据,输出也叫做写出数据
1.1 IO的分类
根据数据的流向分为:输入流和输出流
- 输入流 :把数据从
其他设备
上读取到内存
中的流 - 输入流 : 把数据从
内存
中写出到其他设备
中的流
根据数据的类型分为:字节流和字符流
1.2 IO流的顶级父类
第三章 字节流
3.1 一切皆为字节
一切文件数据(文本,图片,视频等)在存储时,都是以二进制数字形式保存,都一个个的字节,那么传输时一样如此。所以,字节流可以传输任意文件数据。在操作流的时候,我们要时刻明确,无论使用什么样的流对象,底层传输的始终是二进制数据
3.2 字节输出流【OutputStream】
java.io.OutputStream抽象类是表示字节输出流的所有类的父类,将指定的字节信息写出到目的地。它定义了字节输出流的基本共性方法
public void close()
:关闭此输出流并释放与此流相关联的任何系统资源public void flush()
:刷新此输出流并强制任何缓冲的输出字节被写出public void write(byte[]b)
:将b.length字节从指定的字节数组写入此输出流public void write (byte[]b,int off,int len)
:从指定的字节数组写入len字节,从偏移量off开始输出到此输出流public abstract void write(int b)
:将指定的字节输出流
3.3 FileOutputStream类
FileOutputStream
类是文件输出流,用于将数据写出到文件
构造方法
public FileOutputStream(File file)
:创建文件输出流以写入由指定的File对象表示文件public FileOutputStream(String name)
: 创建一个向具有指定名称的文件中写入数据的输出文件流
写出字节数据
数据追加续写
public FileOutputStream(File file,boolean append)
:创建文件输出流以写入由指定的File对象表示的文件。public FileOutputStream(String name,boolean append)
:创建文件输出流以指定的名称写入文件
输入流的换行符号:
windows:\r\n
Linux: /n
mac: /r
3.4 字节输入流【InputStream】
InputStream抽象类是表示字节输入流的所有类的父类,可以读取字节信息到内存中。他定义了字节输入流的基本共性功能方法。
public void close( )
: 关闭此输入流并释放与此流相关联的任何系统资源public int read( )
:从输入流读取数据的下一个字节public int read (byte[]b)
:从输入流中读取一些字节数,并将他们存储到字节数组b中
3.5 FileInputStream类
是文件输入流,从文件中读取字节
构造方法
FileInputStream(File file)
:通过打开与实际文件的连接来创建一个FileInputStream,该文件由文件系统中的File对象file命名FileInputStream(String name)
:通过打开与实际文件的连接来创建一个FileInputStream,该文件由文件系统中的路径名name命名
读取字节数据
1.读取字节:read
方法,每次可以读取一个字节的数据,提升为int类型,读取到文件末尾,返回-1
明确两件事情:
1.方法参数byte[]的作用
起到缓冲的作用,指定读取多少个字节,然后一次性读取
数组的长度一般定义为1024(1kb)或者是1024的整数倍
2.方法的返回值int是
每次读取的有效字节个数
3.6 文件复制
package com.IO;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
*文件复制:一读一写
*/
public class CopyFile {
public static void main(String[] args) throws IOException {
//创建文件输入流对象
FileInputStream fis = new FileInputStream("e:\\b.txt");
//创建文件输出流对象
FileOutputStream fos = new FileOutputStream("d:\\b.txt");
//用一个byte数组来做缓冲区 定义一次性读取/写入多少字节
byte[] bytes = new byte[1024];
//定义一个int类型变量接收读取到的位置,来判断是否读取到了最后一位
int len = 0;
while ((len = fis.read(bytes))!=-1){
fos.write(bytes);
}
//关闭流
fos.close();
fis.close();
}
}
第四章 字符流
当使用字节流读取文本时,可能会有一个小问题。就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储。所以java提供了一些字符流,以字符为单位读写数据,专门用于处理文本文件
4.1 字符输入流【Reader】
Reader抽象类时表示用于读取字符流的所有类的父类,可以读取字符信息到内存中。它定义了字符输入流的基本共性功能方法
public void close( )
:关闭此流并释放与此流相关联的系统资源public int read( )
:从输入流读取一个字符public int read(char[] cbuf)
:从输入流中读取一些字符,并把它们存储到字符数组cbuf中
4.2 FileReader类
FileReader类是读取字符文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区
构造方法
public FileReader(File file)
:创建一个新的FileReader,给定要读取的File对象public FileReader(String name)
:创建一个新的FileReader,给定要读取的文件名称
读取字符
方法和字节输入流一样
4.3 字符输入流【Writer】
Writer抽象类是表示用于写出字符流的所有类的父类,将指定的字符信息写出到目的地。它定义了字节输出流的基本共性功能方法
public void write(int c)
:写入单个字符public void write(char[] cbuf)
:写入字符数组public abstract void write(char[] cbuf, int off, int len)
: 写入字符数组的某一部分public void write(String str)
:写入字符串public void write(String str,int off,int len)
:写入字符串的某一部分public void flush
:刷新该流的缓冲public void close
:关闭流,但是要先刷新
4.4 FileWriter类
FileWriter类是写出字符到文件的便利类。构造时使用系统默认的字符编码和默认的字节缓冲区
构造方法
与FileReader相反
基本写出数据
关闭和刷新
因为内存缓冲区的原因,如果不关闭输出流,无法写出字符到文件中。但是关闭的流对象,是无法继续写出数据的。如果即想写出数据,又不想关闭流,就需要flush方法了
写出其他数据
1.写出字符数组:write(char[] cbuf)
和write(char[] cbuf,int off,int len)
,每次可以写出字符数组中的数据
2.写出字符串:public void write(String str)
和public void write(String str,int off,int len)
,每次可以写出字符串中的数据
3.续写和换行:操作类似于FileOutputStream
第五章 属性集
5.1 概述
java.util.Properties
继承于Hashtable
,来表示一个持久的属性集。它使用键值结构存储数据,每个键及其对应值都是一个字符串。该类也被许多java类使用,比如获取系统属性时,System.getProperties
方法就是返回一个Properties
对象
5.2 Properties类
构造方法
public Properties( )
:创建一个空的属性列表
基本存储方法
public Object setProperties(String key,String value)
:保存一对属性public String getProperties(String key)
:通过key找到valuepublic Set<String> stringPropertiesName( )
:所有键的名称的集合(保存key值的集合)
使用步骤:
- 创建一个Properties对象
- 调用其中的set方法将数据存入到对象中
- 创建一个输入/输出流(字节流不能加载中文,字符流可以)
- 调用load/store方法,将数据从对象中写出/存入