(二)文件路径操作


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"));
}
}

版权声明:欢迎转载,欢迎扩散,但转载时请标明作者以及原文出处,谢谢合作!             ↓↓↓
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,598评论 18 399
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,818评论 25 707
  • 每年暑假和寒假,二姐都会带着两个孩子在北京山东安徽来回奔波,每次都是来去匆匆,大部分的时间都浪费在路上。没有办法,...
    贾学礼零售阅读 283评论 0 0
  • 近日网上疯传了一个视频,说的是未满18岁的少年刘XX用污言秽语拒绝一个扫码「创业者」,发现对方用手机报警后夺去不还...
    毒舌姐姐阅读 362评论 0 1