程序员可通过File类在硬盘上操作文件和目录。File类只能表示文件/目录的信息(如名称、大小),不能用于文件的访问。
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) {
/*
* 假设在F盘下有一个文件Java
* 由于\是转义字符,所以在路径中要用双斜杠
*/
File file1=new File("F:\\Java"); //File类的构造函数
/*
* File.separator用于设置分隔符 这样任何系统都认识中间的分隔符
*/
File file11=new File("F:"+File.separator+"Java");
System.out.println(file1.exists()); //判断文件/文件夹是否存在 true
System.out.println(file11.exists()); //判断文件/文件夹是否存在 true
File file2=new File("F:\\Java\\IO\\File");
if(!file2.exists()){
/*
* 创建多级目录用mkdirs(),创建一级目录用mkdir()
*/
file2.mkdirs();//文件不存在,自动创建IO和File
//file2.mkdir(); //仅仅创建IO
}
else{
file2.delete();//如果目录存在,删除文件夹File
}
/*
* 判断是否是一个目录
* 如果是目录返回true,如果不是目录或者目录不存在返回false
*/
System.out.println(file1.isDirectory()); //true
/*
* 判断是否是一个文件
*/
System.out.println(file1.isFile()); //false
File file3=new File("F:\\Java\\IO\\File\\日记1.txt");
//File file33=new File("F:\\Java\\IO\\File","日记1.txt"); //功能与上面的语句相同
System.out.println(file3.isFile()); //false
if(!file3.exists())
try{
file3.createNewFile(); //自动添加异常处理
}catch(IOException e){
e.printStackTrace();
}
else
file3.delete();
System.out.println(file3.isFile()); //true
/*
* 常用的File对象的API
*/
//直接打印file1,打印的是file1.toString()的内容
System.out.println(file1); //F:\Java
System.out.println(file1.getAbsolutePath());//功能与上面的语句相同
System.out.println(file1.getName());//打印最后的目录名 Java
System.out.println(file1.getParent());//得到父目录的路径 F:\
System.out.println(file1.getParentFile());//功能与上面的语句相同
System.out.println(file3.getName()); //日记1.txt
System.out.println(file3.getParent()); //F:\Java\IO\File
System.out.println(file3.getParentFile());
}
}
import java.io.File;
import java.io.IOException;
/*
* 列出File类的一些常用操作 比如过滤、遍历等操作
* 假设F盘下有一个文件夹名为java,java下有一文件夹名为IO
* IO下有一文件夹名为new,还有一文件名为new.txt
* new下有一文件夹名为new1,还有一文件名为new1.txt
*/
class FileUtils {
/**
* 列出指定目录下(包括其子目录下)的所有文件
* @param dir
* @throws IOException
*/
public static void listDirectory(File dir)throws IOException{
if(!dir.exists()){
throw new IllegalArgumentException("目录:"+dir+"不存在.");
}
//list()方法用于列出当前目录下文件名和文件夹名
String[] filenames=dir.list();
System.out.println("目录"+dir+"下的文件名和文件夹名:");
for(String f:filenames){
System.out.println(f); //不包含子目录下的文件名和文件夹名
}
/*System.out.println("目录"+dir+"的子目录:");
for(String f:filenames){
System.out.println(dir+"\\"+f);
}*/ //该注释掉的内容与下面的listFiles()方法功能相同
//listFiles()方法用于返回子目录
File[] files=dir.listFiles();
System.out.println("目录"+dir+"的子目录:");
for(File file:files){
System.out.println(file);
}
System.out.println();
if(files!=null&&files.length>0){ //files!=null用来判断是否有子目录
for(File file:files){
if(file.isDirectory()){
//递归
System.out.println("将目录 "+file+" 传给listDirectory()进行递归:");
listDirectory(file);
}
}
}
}
}
public class FileUtilsTest{
public static void main(String[] args)throws IOException{
FileUtils.listDirectory(new File("F:\\Java"));
}
}
运行结果:
目录F:\Java下的文件名和文件夹名:
IO
XML
字符编码
目录F:\Java的子目录:
F:\Java\IO
F:\Java\XML
F:\Java\字符编码
将目录 F:\Java\IO 传给listDirectory()进行递归:
目录F:\Java\IO下的文件名和文件夹名:
new
new.txt
目录F:\Java\IO的子目录:
F:\Java\IO\new
F:\Java\IO\new.txt
将目录 F:\Java\IO\new 传给listDirectory()进行递归:
目录F:\Java\IO\new下的文件名和文件夹名:
new1
new1.txt
目录F:\Java\IO\new的子目录:
F:\Java\IO\new\new1
F:\Java\IO\new\new1.txt
将目录 F:\Java\IO\new\new1 传给listDirectory()进行递归:
目录F:\Java\IO\new\new1下的文件名和文件夹名:
目录F:\Java\IO\new\new1的子目录:
将目录 F:\Java\XML 传给listDirectory()进行递归:
目录F:\Java\XML下的文件名和文件夹名:
books.txt
books.xml
目录F:\Java\XML的子目录:
F:\Java\XML\books.txt
F:\Java\XML\books.xml
将目录 F:\Java\字符编码 传给listDirectory()进行递归:
目录F:\Java\字符编码下的文件名和文件夹名:
目录F:\Java\字符编码的子目录: