在Java中,对文件或目录进行管理与操作在编程中有着非常重要的作用,Java提供了一个非常重要的类(File)来管理文件和文件夹,通过类不仅能够查看文件或目录的属性,而且还可以实现对文件或目录的创建、删除与重命名等操作。
以下是File类中常用的几个方法:
方法 | 作用 |
File(String pathname) | 根据指定的路径创建一个File对象 |
createNewFile() | 若目录或文件存在,则返回false,否则创建文件或文件夹 |
delete() | 删除文件或文件夹 |
isFile() | 判断这个对象表示的是否是文件 |
isDirectory() | 判断这个对象表示的是否是文件夹 |
listFiles() | 若对象代表目录,则返回目录中所有文件的File对象 |
mkdir() | 根据当前对象指定的路径创建目录 |
exists() | 判断对象对应的文件是否存在 |
getName() | 获取文件名 |
length() | 获取文件大小(字节量) |
lastModified() | 查看文件最后一次修改时间 |
补充:RandomAccessFile(详见六)
java.io.RandomAccessFile
可以读写文件数据,读写操作是基于指针完成的,总是在指针当前位置进行读写操作。
模式常用到的有:
(1)“r”:只读
(2)“rw”:读写
读写完毕后,要调用close()关闭以释放连接。
一、如何列出某个目录下的所有目录与文件?
package com.haobi;
import java.io.File;
/*
* 列出某个目录下的所有目录与文件
*/
public class ListFile {
public static void main(String[] args) {
File file = new File("E:\\File_java\\FileDemo");//文件路径
//判断目录是否存在
if(! file.exists()) {
System.out.println("文件目录不存在!");
return;
}
File[] fileList = file.listFiles();
for(int i=0;i<fileList.length;i++) {
//判断是文件或文件夹
if(fileList[i].isDirectory()) {
System.out.println("文件夹:"+fileList[i].getName());
}else {
System.out.println("文件:"+fileList[i].getName());
}
}
}
}
//程序输出结果如下:
文件:.classpath
文件:.project
文件夹:.settings
文件夹:bin
文件夹:src
二、如何查看文件最后一次修改的时间?
package com.haobi;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
* 查看文件最后一次修改时间
*/
public class FindLastModifiedTime {
public static void main(String[] args) {
File file = new File("E:\\File_java\\FileDemo");//文件路径
//判断目录是否存在
if(! file.exists()) {
System.out.println("文件目录不存在!");
return;
}
long last = file.lastModified();
Date date = new Date(last);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String str = sdf.format(date);
System.out.println("文件的最后修改时间:"+str);
}
}
//程序输出结果如下:
文件的最后修改时间:2019年03月31日 17:18:12
三、如何创建一个多级目录?
package com.haobi;
import java.io.File;
/*
* 创建一个多级目录
* 在当前路径下创建a/b/c/d/e/f
*/
public class CreateDir {
public static void main(String[] args) {
File dir = new File("a"+File.separator+
"b"+File.separator+
"c"+File.separator+
"d"+File.separator+
"e"+File.separator+
"f");
if(!dir.exists()) {
dir.mkdirs();//创建目录
System.out.println("创建完成!");
}
}
}
//程序输出结果如下:
创建完成!
注:mkdirs()会在创建当前目录的同时一并创建所有不存在的父目录
四、如何删除目录?
package com.haobi;
import java.io.File;
/*
* 删除当前目录下的目录"a"
*/
public class DeleteDir {
//将给定的File对象删除
private static void deleteFile(File file) {
if(file.isDirectory()) {//如果当前file对象是目录
File[] subs = file.listFiles();
for(File sub:subs) {
deleteFile(sub);//将每一个子项删除
}
}
file.delete();
}
public static void main(String[] args) {
File dir = new File("a");
deleteFile(dir);
}
}
五、如何获取一个目录下的所有子项?
package com.haobi;
import java.io.File;
/*
* 获取当前目录下的所有子项(文件夹或目录)
*/
public class GetDir {
public static void main(String[] args) {
File dir = new File(".");//表示当前目录
File[] subs = dir.listFiles();
for(File sub:subs) {
System.out.println((sub.isFile()?"文件:":"目录:")+sub.getName());
}
}
}
//程序输出结果如下:
文件:.classpath
文件:.project
目录:.settings
目录:bin
文件:iotest.txt
目录:src
六、如何复制文件?
package com.haobi;
import java.io.IOException;
import java.io.RandomAccessFile;
/*
* 复制文件
*/
public class CopyFile {
public static void main(String[] args) throws IOException{
//创建RandomAccessFile读取源文件
RandomAccessFile src = new RandomAccessFile("demo.txt","r");
//创建RandomAccessFile向目标文件写
RandomAccessFile desc = new RandomAccessFile("copy_demo.txt","rw");
int d = -1;//随便设置,只用于初始化,被使用时会被重新赋值
long start = System.currentTimeMillis();
while((d=src.read()) != -1) {//如果没有读到文件末尾
desc.write(d);//读写文件
}
long end = System.currentTimeMillis();
System.out.println("拷贝完毕!耗时:"+(end-start)+"ms");
src.close();
desc.close();
}
}
//程序输出结果如下:
拷贝完毕!耗时:0ms
七、如何批量写出字节?
package com.haobi;
import java.io.IOException;
import java.io.RandomAccessFile;
/*
* 批量写出字节
* 将字符串内容写入文件
*/
public class WriteByte {
public static void main(String[] args) throws IOException{
RandomAccessFile raf = new RandomAccessFile("text.txt","rw");
String str = "我爱你";
byte[] data = str.getBytes();
raf.write(data);
raf.close();
}
}