1、File类常用API
java.io.File类用于表示文件或目录,只能用于表示文件或目录的信息,例如名称、大小等,不能用于文件内容的访问,以下较为详细的介绍了File类的一些常用方法。
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class FileDemo {
public static void main(String[] args){
File file = new File("F:\\java");//一定要双斜杠,否则为转义字符
/*
File file = new File("F:/java");
"/"反斜杠也可以作为分隔符
File file = new File("F:"+File.separator+"java");
用File.separator作为分隔符可保证不同系统间的通用性
*/
if(!file.exists()){//判断文件或目录是否存在
file.mkdir();//创建单一目录
}/*else{
file.delete();//删除文件或目录
}*/
//判断是否为一个目录,如果不是目录或目录不存在,返回false
System.out.println(file.isDirectory());//true
//判断是否为一个文件
System.out.println(file.isFile());//false
//判断是否为一个隐藏文件
System.out.println(file.isHidden());//false
File file1 = new File("F:\\a\\b\\c");
if(!file1.exists()){
file1.mkdirs();//创建多级目录
}
File file2 = new File("F:\\简书.txt");
//以下为不同的表示方法
//File file2 = new File("F:","简书.txt");
/*
File dir = new File("F:");
File file2 = new File(dir,"简书.txt");
*/
if(!file2.exists()){
try {
file2.createNewFile();//创建文件,会有异常产生,可选择捕捉该异常或直接抛出异常
} catch (IOException e) {
e.printStackTrace();
}
}/*else{
file2.delete();//删除文件或目录
}*/
//相当于file.toString()的内容
System.out.println(file);//F:\java
//得到文件或目录的绝对路径字符串
System.out.println(file.getAbsolutePath());//F:\java
//得到最后一个文件或最后一级目录的名字
System.out.println(file1.getName());//c
//得到文件或目录的全部路径字符串
System.out.println(file2.getPath());//F:\简书.txt
//得到最后一个文件或最后一级目录的父目录名字符串
System.out.println(file1.getParent());//F:\a\b
//得到最后一个文件或最后一级目录的父目录名,再将父目录名转为绝对路径字符串
System.out.println(file2.getParentFile().getAbsolutePath());//F:\
//文件最后被修改的时间
System.out.println(new SimpleDateFormat("yyyy-MM-dd E HH:mm:ss").format(new Date(file2.lastModified())));//2017-03-01 星期三 16:09:36
}
}
2、获得指定目录文件列表
import java.io.File;
public class FileDemo2 {
public static void main(String[] args) {
//列出所有的系统根(不常用)
File[] dir1 = File.listRoots();
for(File dir: dir1){
System.out.println(dir);
}
/*
C:\
D:\
E:\
F:\
*/
//列出指定目录下的所有文件及文件夹,以字符串的形式返回
File dir2 = new File("F:\\");
String[] arr = dir2.list();
for(String ss: arr){
System.out.println(ss);
}
/*
GAME
a
java
movie
sc
简书.txt
*/
//列出指定目录下的所有文件及文件夹,以File的形式返回
//常用此方法,因为返回的File文件可以实现更多功能
File dir3 = new File("F:\\");
File[] arr1 = dir3.listFiles();
for(File f: arr1){
System.out.println(f.getAbsolutePath());
}
/*
F:\GAME
F:\a
F:\java
F:\movie
F:\sc
F:\简书.txt
*/
}
}
3、递归解析
递归,简单的讲,就是让某个方法调用它本身,在使用递归操作时要注意以下两点:
1.不要调用太多次,防止内存溢出
2.要有结束调用的条件,防止死循环
举一个简单的例子:
//求1至num各数相加的和
public int add(int num){
if(num == 1){
return 1;
}else{
return num+add(num-1);
}
以下详细的解释了该方法递归的流程:
4、遍历目录
列出指定目录及其子目录下的所有文件:
import java.io.File;
public static void main(String[] args){
File dir = new File("F:\\java");
lists(dir);
}
public static void lists(File dir){
//输出目录
System.out.println("dir:"+dir);
//递归子目录
File[] files = dir.listFiles();
for (File file : files) {
if(file.isDirectory()){
lists(file);
}else{
//输出文件
System.out.println("file:"+file);
}
}
}
/*
dir:F:\java
dir:F:\java\a
dir:F:\java\a\a1
dir:F:\java\a\a2
file:F:\java\a\a2\a3.txt
dir:F:\java\b
dir:F:\java\b\b1
dir:F:\java\b\b1\b2
dir:F:\java\c
dir:F:\java\c\c4
file:F:\java\简书.txt
*/
5、整理成工具类
import java.io.File;
import java.io.IOException;
public class FileUtils {
/**
* 列出指定目录及其子目录下的所有文件
* @param dir
* @throws IOException
*/
public static void listDirectory(File dir)throws IOException{
if(!dir.exists()){
throw new IllegalArgumentException("目录:"+dir+"不存在");
}
if(!dir.isDirectory()){
throw new IllegalArgumentException(dir+"不是目录");
}
System.out.println("dir:"+dir);
File[] files = dir.listFiles();
if(files!=null&&files.length>0){
for (File file : files) {
if(file.isDirectory()){
listDirectory(file);
}else{
System.out.println("file:"+file);
}
}
}
}
}
创建测试类
import java.io.File;
import java.io.IOException;
public class FileUtilsTest {
public static void main(String[] args) throws IOException {
FileUtils.listDirectory(new File("F:\\java"));
}
}
版权声明:欢迎转载,欢迎扩散,但转载时请标明作者以及原文出处,谢谢合作! ↓↓↓