Java 本地文件操作

File类简介

  • File 类用来代表文件或文件夹,通过 File 类,可以对文件与文件夹进行丰富的操作,并且可以获取文件的路径、大小、文件名等信息。

文件的创建、删除、重命名

  • 通过文件类的 createNewFile() 方法创建文件
  • 通过 delete() 方法删除文件
  • 使用 renameTo() 方法重命名文件,renameTo() 方法时依靠另一个 File 对象来重命名。
public class FileTest {

    public static void main(String[] args) {
        // 创建文件对象
        File file = new File("Hello File.txt");
        File file2 = new File("newHello.txt");
        try {
            file.createNewFile();  //创建文件
            System.out.println("创建文件成功");
        } catch (IOException e) {
            System.out.println("创建文件失败");
        }
        file.renameTo(file2);  //文件重命名
    }
}

文件夹的创建、删除、重命名

  • 通过 mkdir() 与 mkdirs() 方法创建文件夹:如果想创建一层接着又一层的文件夹,则用 mkdirs() 方法,自动补全中间的文件夹。
  • 通过 delete() 方法删除文件夹
  • 使用 renameTo() 方法对文件夹重命名
public class FileTest {

    public static void main(String[] args) {
        // 创建文件夹对象
        File floder = new File("Hello floder");
        File floder1 = new File("new floder/one/two/three/main");
        File floder2 = new File("new Hello fioder");
        if(floder.mkdir()){  
            //mkdir() 方法返回的是boolean类型值,所以可以做判断是否创建成功
            System.out.println("文件夹创建成功");
        }else if(floder.exists()){
            //exists()方法为判断是否存在当前文件夹,返回bollean值类型
            System.out.println("文件夹以存在,不用创建");
        }else {
            System.out.println("创建文件夹失败");
        }
         // mkdirs()方法自动完成one two three main 文件夹的创建
        floder1.mkdirs(); 
        floder.renameTo(floder2);//重命名文件夹
        //floder.delete(); //删除该文件夹
        
    }    
}

文件属性的读取

  • exists() 方法判断文件是否存在
  • getName() 方法读取文件名称
  • getPath() 方法读取文件路径
  • getAbsolutePath() 方法读取文件的绝对路径
  • getParent() 方法读取父级路径
  • length() 方法读取文件大小
  • isHidden() 方法读取文件是否被隐藏
  • canRead() 方法判断文件是否可读
  • canWrite() 方法判断文件是否可写
  • isDirectory() 方法判断文件是否为文件夹
public class FileTest2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        File file = new File("floder/Hello.txt");
        
        //判断文件是否存在
        System.out.println("文件是否存在:"+file.exists());
        //读取文件名称
        System.out.println("文件的名称 :"+file.getName());
        //读取文件路径
        System.out.println("文件的路径:"+file.getPath());
        //读取文件绝对路径
        System.out.println("文件的绝对路径:"+file.getAbsolutePath());
        //读取文件父级路径
        System.out.println("文件的父级路径:"+file.getParent());
        //读取文件大小
        System.out.println("文件的大小:"+file.length());
        //判断文件是否被隐藏
        System.out.println("文件是否被隐藏:"+file.isHidden());
        //判断文件是否可读
        System.out.println("文件是否可读:"+file.canRead());
        //判断文件是否可写
        System.out.println("文件是否可写:"+file.canWrite());
        //判断文件是否为文件夹
        System.out.println("判断是否为文件夹:"+file.isDirectory());
    }
}

文件属性的设置

  • setWritable() 方法设置文件是否可写
  • setReadable() 方法设置文件是否可读
  • setReadOnly() 方法设置文件只读
public class FileReadWrite {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        File file = new File("floder/Hello.txt");
        //设置文件可写
            file.setWritable(true);
        //设置文件可读
            file.setReadable(true);
        //设置文件为只读
            file.setReadOnly();
    }

遍历文件夹

  • 通过使用 listFile() 方法获取文件夹中的所有项目,包括文件和文件夹。查看 listFile() 方法可以发现其返回的是一个文件类型的数组。
  • 以下例子将利用递归思想实现文件夹的遍历
public class FileScaner {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        scanerFile(new File("E:/study_Java"),1);
    }
    public static void  scanerFile(File dir,int tab) {
        if (dir.isDirectory()) {//判断是否为文件夹
            //将该文件夹下所有的文件及文件夹存入数组中
        File nextDir[]= dir.listFiles(); 
        for (int i = 0; i < nextDir.length; i++) {
            // 这个for循环为了增强输出格式的可读性
            for (int j = 0; j < tab; j++) {
                System.out.print("|--");
            }
            //输出文件及文件夹名
            System.out.println(nextDir[i].getName());
            if (nextDir[i].isDirectory()) {
                //如果为文件夹,则递归调用sannerFile
                scanerFile(nextDir[i],tab+1);
            }
        }
        }
    }
}

文件的简单读写

  • I/O 流中有文件的输入输出类
  • FileInputStream 继承 InputStream,可以通过其创建文件字节输入流; FileOutputStream 继承 OutputStream,可以通过其创建文件字节输出流
  • 通过 InputStreamReader 类创建字符输入流;通过 OutputStreamReader 类创建字符输出流
  • 通过 BufferReader 类创建数据缓冲流,再使用 readLine() 方法获取缓冲流的数据
  • 具体实现分析一下代码
public class ReadWriteTextFile {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        readFile(new File("floder/Hello.txt"));
        writeFile(new File("floder/HelloWrite"));
    }

    public static void readFile(File file) {
        
        try {
            //创建文件字节输入流
            FileInputStream fis = new FileInputStream(file);
            //创建字符输入流
            InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
            //创建缓冲流
            BufferedReader br = new BufferedReader(isr);
            
            String line ;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
            br.close();
            isr.close();
            fis.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }    
    }
    
    public static void writeFile (File file) {
        try {
            //创建文件输出流
            FileOutputStream fos = new FileOutputStream(file);
            //创建字符输出流
            OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
            //创建输出缓冲流
            BufferedWriter bw = new BufferedWriter(osw);
            
            osw.write("宣州谢朓楼饯别校书叔云\n");
            osw.write("弃我去者,昨日之日不可留;\n");
            osw.write("乱我心者,今日之日多烦忧。\n");
            osw.close();
            osw.close();
            fos.close();
            
         } catch (FileNotFoundException e) {
            e.printStackTrace();
         } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
         } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容

  • 一、流的概念和作用。 流是一种有顺序的,有起点和终点的字节集合,是对数据传输的总成或抽象。即数据在两设备之间的传输...
    布鲁斯不吐丝阅读 9,950评论 2 95
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,295评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • 之所以写这个是因为Hadoop的IO与·这个类似 但要比这个深入,而且都还涉及到网络传输原理的五个层次。所以,一...
    起个什么呢称呢阅读 936评论 0 6
  • 今天看《结构思考力》二三章。 第二章 基于目标定主题 本章主要说,要想让表达有的放矢,就要先确定目标。因为目标可以...
    米小喆阅读 177评论 0 0