一、javaIO
1、全称:javaInputOutput
2、作用:解决java对本地文件的操作问题
二、File类
1、位置:java.io包
2、功能:表示本地文件和文件夹并对其属性信息做一些获取和判断操作
3、方法
(1)表示
File file=new File("E:/a.txt");
File file1=new File("E:/a");
(2)判断
System.out.println(file.canRead());// 文件是否可读
System.out.println(file.canWrite());// 文件是否可写
System.out.println(file.exists());// 文件是否存在
System.out.println(file.isHidden());// 文件是否被隐藏
System.out.println(file.isDirectory());// 文件是否是目录
System.out.println(file.isFile());// 文件是否是文件
(3)获取
System.out.println(file.getAbsoluteFile());// 获取文件绝对地址
System.out.println(file.getName());// 获取文件名
System.out.println(new Date(file.lastModified()));// 获取文件最后一次修改的时间
System.out.println(file.length());// 获取文件中的字节个数
(4)创建和删除文件
File file=new File("E:/a/c.txt");
System.out.println(file.createNewFile());// 创建文件并返回文件是否创建成功
System.out.println(file.delete());// 删除文件并返回文件是否删除成功
(5)创建和删除目录
File file1=new File("E:/b/c/d");
System.out.println(file1.mkdir()); // 创建单级目录
System.out.println(file1.mkdirs()); // 创建多级目录
System.out.println(file1.delete());// 删除空目录
(6)删除目录(包括空目录和非空目录)和文件
/**
* 语义:删除file对象表示的目录或者文件
* @param file 要删除目录或文件的file对象
*/
private void delDirDG(File file){
// 递归终止条件
if(file.isFile()){
file.delete();
return;
}
File[] files = file.listFiles();
if(files.length==0){
file.delete();
return;
}
// 递归操作
for(File file1 : files){
delDirDG(file1);
}
file.delete();
}
三、输入、输出、流、字节、字符、字节流、字符流
(1)输入(input / read):从文件向程序传数据
(2)输出(output / write):从程序向文件传输数据
(3)流:java中提供的一些具有将硬盘文件中的数据读取到程序或将程序中数据写入到目标位置的类
(4)字节:计算机中最小的存储单位,计算机中所有的文件都是以字节为单位存储在硬盘中的
(5)字符:文字、字母等,如:中----20013----3个字节(utf-8编码,一个汉字占3个字节,任意编码中,一个英文字母占1个字节)
(6)字节流:以字节为单位进行读写
(7)字符流:以字符为单位进行读写操作,底层会将原始字节转为字符
注:字符流只能读写纯文本文件(只有字符)
四、字节流(inputStream、outputStream)
1、文件输入字节流和文件输出字节流
(1)read(读取字节)
// 1、read方法一次读取到一个字节,返回值为独到的字节编码,读完字节后返回值为-1
System.out.println(in.read());
//一次读byte数组个字节,返回数组中一次实际装入的字节个数,读完字节之后返回值为-1
System.out.println(in.read(byte[] b));
(2)write(写入字节)
out.write(t);
out.write(bytes,0,size);
(3)读取文件A中的数据到文件B(单个字节读写)
public static void main(String[] args) throws IOException {
FileInputStream in=new FileInputStream("E:/a.txt");
FileOutputStream out=new FileOutputStream("E:/b.txt");// 文件不存在会自动创建文件
int t=0;
while ((t=in.read())!=-1){
out.write(t);
}
in.close();// 关闭输入流,释放对文件的占用
out.close();// 关闭输出流
}
A:缺点:循环次数多;读写次数多;效率低
B:输入流和输出流必须关闭,否则会成为僵尸对象,占用内存资源,无法被JVM回收处理
(4)读取文件A中的数据到文件B(字节数组读写)
public static void main(String[] args) throws IOException {
FileInputStream in=new FileInputStream("E:/abc.png");
FileOutputStream out=new FileOutputStream("E:/abc1.png");// 文件不存在会自动创建文件
byte []bytes=new byte[100];
int size=0;
while ((size=in.read(bytes))!=-1){
// write一次,
out.write(bytes,0,size);
}
in.close();// 关闭输入流,释放对文件的占用
out.close();// 关闭输出流
}
注意:字节数组的大小要适当,太小效率低,太大占内存