文件:Java中保存数据的地方
文件流:文件在程序中以流的形式操作的
输入流:数据从数据源(文件)到程序(内存)之间的路径
输出流:数据从程序(内存)到数据源(文件)之间的路径
Java中关于文件的操作:
File:文件类,实现了Serializable和Comparable接口
创造文件:new File(String FilePath) 文件路径
new File(File parent, String child)父目录+子路径
new File(String parent, String child)父目录+子路径
操作文件:getName():获取文件名字
getAbsolutePath():获取文件的绝对路径
getParent():获取文件父级路径
length():获取文件长度,按照字节数统计
exists():判断文件是否存在
delete():删除文件
isFile():判断是否是一个文件
Java中关于目录操作:
创建目录:mkdir():创建单层文件目录
mkdirs():创建多层文件目录
操作文件目录:
isDirectory():判断是否是一个目录
Java中的IO流:
I--> Input、O--> Output,用于数据传输、网络通信。
Java中,对于数据的输入、输出操作以“流(Stream)”的形式进行
Java中的io包提供了各种“流”类和接口,用于获取不同种类的数据,通过方法输入、输出数据
输入Input:读取外部数据(磁盘、光盘等存储设备中的数据)到程序(内存)中
输出Output:将程序(内存)数据输出到磁盘。光盘等存储设备中
流的分类:
1.按照操作数据单位不同:字节流、字符流
2.按照流的流向不同:输入流、输出流
3.按照流的角色不同:节点流、包装流(处理流)
InputStream:字节输入流 OutputStream:字节输出流
Reader:字符输入流 Writer:字符输出流
Java的IO流涉及40多个类,实际上都是从以上四个抽象基类派生出来的
以读取文件为例讲解四个类:
按照字节读取文件:FileInputStream、FileOutputStream
1.FileInputStream的创建:
new FileInputStream(filePath)
2.FileInputStream中的read方法:
read():表示从输入流中读取一个字节的数据。返回读取字节的码值;读取完毕返回-1
read(byte[] b):表示从输入流中读取b.length个字节数据并把它们保存在字节数组b中
读取正常返回实际读取的字节数;读取完毕返回-1;b中缓存的是读取的字节
3.FileOutputStream的创建:
new FileOutputStream(filePath):写入内容时,会将原来的内容覆盖
new FileOutputStream(filePath, true):写入内容时,会在原先的内容上进行追加
4.FileOutputStream中的write方法:
write(Byte b):写入一个字节
write(str.getBytes()):将字符串转为字节数组写入
write(str.getBytes(), off, len):将字符串转为字节数组,从off位置写len个字节
// 完成对文件的拷贝:将d:\\郁金香.jpg拷贝到d:\\.temp\\花花\\郁金香.jpg
String srcPath = "d:\\郁金香.jpg";
String descPath = "d:\\.temp\\花花\\郁金香.jpg";
// 创建文件输入流,准备将文件读取到程序
FileInputStream fis = new FileInputStream(srcPath);
// 创建文件输出流,准备将数据写入文件
FileOutputStream fos = new FileOutputStream(descPath);
// 创建字节数组,存储数据
byte[] bytes = new byte[1024];
// 实际读取的长度
int readLen = 0;
// 边读边写的方式
while((readLen = fis.read(bytes)) != -1) {
bos.write(bytes, 0, readLen);
}
System.out.println(拷贝完成");
// 关闭IO流,避免造成资源的浪费
if (fis != null) {
fis.close();
}
if (fos != null) {
fos.close();
}
按照字符读取文件:FileReader、FileWriter
1.FileReader的创建:
new FileReader(file)
new FileReader(filePath)
2.FileReader的read方法:
read():读取单个字符。返回该字符;如果读到文件末尾返回-1
read(char[]):读取多个字符数组到数组。返回读取到的字符数;读到文件末尾返回-1
3.FileWriter的创建:
new FileWriter(filePath):覆盖模式,相当于流的快捷键在首段
new FileWriter(filePath, true):追加模式,相当于流的快捷键在尾段
4.FileWriter的write方法:
write(int):写入单个字符
write(char[]):写入指定数组 write(char[], off, len):写入指定数组的指定部分
write(String):写入指定字符串 write(String, off, len):写入指定数组的指定部分
注意:在使用FileWriter后,必须关闭(close)或刷新(flush),否则无法写入指定文件
// 完成文件的拷贝:将d:\\test.txt拷贝到d:\\.temp\\test1.txt
String srcPath = "d:\\test.txt";
String descPath = "d:\\.temp\\test1.txt";
// 创建文件输入流将数据从文件读取到程序中
FileReader fr = new FileReader(srcPath);
// 创建文件输出流将数据输出到文件中
FileWriter fw = new FileWriter(descPath);
// 创建字符数组
char[] chars = new char[8];
// 读取字符长度
int readLen = 0;
while((readLen = fr.read(chars)) != -1) {
fw.write(chars);
}
// 关闭IO流,释放资源
fr.close();
fw.close();