1.基本概念
- File类和四大家族没有关系,所以File类不能完成文件的读写
- 一个File对象是目录名或者文件的抽象表示形式
示例程序
public class FileTest01 {
public static void main(String[] args) throws IOException {
File file = new File("D:\\file");
//判断是否存在
System.out.println(file.exists());
if(!file.exists()) {
//以文件的形式新建
file.createNewFile();
}
if(!file.exists()){
//以目录的形式新建
file.mkdir();
}
if(!file.exists()){
File f2 = new File("D:/a/b/c");
//以多重目录创建
f2.mkdirs();
}
}
}
2.常用方法
public class FileTest02 {
public static void main(String[] args) {
File f1 = new File("D:\\迅雷下载");
//获取绝对路径名
System.out.println(f1.getAbsoluteFile());
//获取文件名
System.out.println("文件名:" + f1.getName());
//判断是否是一个目录
System.out.println(f1.isDirectory());
//判断是否是一个文件
System.out.println(f1.isFile());
//获取文件最后一次修改的时间
long haoMiao = f1.lastModified(); //从1970开始的总毫秒数
Date time = new Date(haoMiao);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd:mm:ss SSS");
String strTime = sdf.format(time);
System.out.println(strTime);
//获取文件的大小 (单位:字节)
System.out.println(f1.length());
//获取当前目录下所有子文件
File[] files = f1.listFiles();
for(File f : files){
System.out.println(f.getName());
}
}
}
(重点)3.目录拷贝模板程序
- 总结:"\"是因为转义的原因才有两个"",实际上在字符串中只有1个
- (错误总结)文件拷贝编写程序的时候需要注意:不要将srcFile、desFile设置为一个目录,而是设置为目录\文件名,落实到文件上才不会出错
public class FileCopy {
public static void main(String[] args) {
File srcFile = new File("D:\\Aseprite");
File desFile = new File("D:\\迅雷下载");
FileCopy.create(srcFile, desFile);
}
/**
* 目录拷贝
* @param srcFile 源目录
* @param desFile 目标目录
*/
public static void create(File srcFile, File desFile){
//需要强调:"\\"是因为转义的原因才有两个"\",实际上在字符串中只有1个
String desDtr = desFile.getAbsolutePath().endsWith("\\") ? desFile.getAbsolutePath() :
desFile.getAbsolutePath() + "\\" + srcFile.getName();
desFile = new File(desDtr);
//如果是一个文件,则直接进行拷贝
if(srcFile.isFile()){
copy(srcFile,desFile);
}
//如果是一个目录,则首先将此目录创建出来,然后递归
else if(srcFile.isDirectory()){
desFile.mkdir();
File[] files = srcFile.listFiles();
for(File f : files){
create(f, desFile);
}
}
}
/**
* 文件拷贝
* @param srcFile 源目录
* @param desFile 目标目录
*/
public static void copy(File srcFile , File desFile){
System.out.println(srcFile.getName());
System.out.println(desFile.getName());
System.out.println();
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(srcFile);
fos = new FileOutputStream(desFile);
byte[] bytes = new byte[1024 * 1024];
int retValue = 0;
while((retValue = fis.read(bytes)) != -1){
fos.write(bytes, 0, retValue);
}
fos.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(fis != null){
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(fos != null){
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}