Java IO 之File操作

Java IO 之File操作

一.File中的两个常量分隔符

<code class="hljs java has-numbering"><span class="hljs-keyword">package</span> File;

<span class="hljs-keyword">import</span> java.io.File;

<span class="hljs-javadoc">/**
 * 两个常量
 * 1、路径分隔符  ;
 * 2、名称分隔符     \ (windows)    /(linux等)
 */</span>
<span class="hljs-annotation">@SuppressWarnings</span>(<span class="hljs-string">"all"</span>)
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Demo01</span> {</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span>(String[] args) {
        System.out.println(File.pathSeparator);
        System.out.println(File.separator);
        <span class="hljs-comment">//路径表示形式</span>
        String path = <span class="hljs-string">"E:\\xp\\test\\2.jpg"</span>; <span class="hljs-comment">//不推荐</span>
        <span class="hljs-comment">//适合动态生成时使用</span>
        path = <span class="hljs-string">"E:"</span>+File.pathSeparator+<span class="hljs-string">"win7"</span>+File.separator+<span class="hljs-string">"test"</span>+File.separator+<span class="hljs-string">"2.jpg"</span>;
        path = <span class="hljs-string">"E:/win7/test/2.jpg"</span>;<span class="hljs-comment">//推荐使用      </span>
    }
}</code><ul style="FILTER: ; ZOOM: 1" class="pre-numbering"><li>1</li></ul>

运行结果:

<code class="hljs  has-numbering">;
\</code><ul style="FILTER: ; ZOOM: 1" class="pre-numbering"><li>1</li></ul>

二.相对路径与绝对路径

<code class="hljs java has-numbering"><span class="hljs-keyword">package</span> File;

<span class="hljs-keyword">import</span> java.io.File;

<span class="hljs-javadoc">/**
 * 相对路径与绝对路径 构造File对象
 * 1.相对路径
 *    File(String parent,String child) ==>File("E:/xp/test","2.jpg");
 *    File(File parent,String child)  ==>File(new File("E:/xp/test"),"2.jpg");
 * 2.绝对路径
 *    src = new File("E:/xp/test/2.jpg");
 *    
 *  getName()  返回名称
 *  getPath()  如果是绝对的,返回绝对路径;如果是相对的,返回相对路径。
 *  getAbsolutePath()  返回绝对路径
 */</span>

<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Demo02</span> {</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span>(String[] args) {
        String parentPath = <span class="hljs-string">"E:/xp/test"</span>;
        String name = <span class="hljs-string">"2.jpg"</span>;
        <span class="hljs-comment">//相对路径</span>
        File   src = <span class="hljs-keyword">new</span> File(parentPath,name);
        <span class="hljs-comment">//src = new File(new File(parentPath),name);</span>
        <span class="hljs-comment">//输出</span>
        System.out.println(src.getName());
        System.out.println(src.getPath());
        System.out.println(<span class="hljs-string">"-------------"</span>);
        <span class="hljs-comment">//绝对路径</span>
        src = <span class="hljs-keyword">new</span> File(<span class="hljs-string">"E:/xp/test/2.jpg"</span>);
        System.out.println(src.getName());
        System.out.println(src.getPath());
        System.out.println(<span class="hljs-string">"-------------"</span>);
        <span class="hljs-comment">//没有盘符,一user.dir构建</span>
        src= <span class="hljs-keyword">new</span> File(<span class="hljs-string">"test.txt"</span>);
        <span class="hljs-comment">//src= new File(".");//当前路径,通过这种方式可以找到当前工作空间路径。</span>
        System.out.println(src.getName());<span class="hljs-comment">//返回名称</span>
        System.out.println(src.getPath());<span class="hljs-comment">//如果是绝对的,返回绝对路径;如果是相对的,返回相对路径。</span>
        System.out.println(src.getAbsolutePath());
    }
}</code><ul style="FILTER: ; ZOOM: 1" class="pre-numbering"><li>1</li></ul>

运行结果:

<code class="hljs asciidoc has-numbering">2.jpg
<span class="hljs-header">E:\xp\test\2.jpg
-------------</span>
2.jpg
<span class="hljs-header">E:\xp\test\2.jpg
-------------</span>
test.txt
test.txt
G:\program\javase\IOFile\test.txt</code><ul style="FILTER: ; ZOOM: 1" class="pre-numbering"><li>1</li></ul>

三.File的常用方法

<code class="hljs cs has-numbering">package File;

import java.io.File;
import java.io.IOException;
<span class="hljs-comment">/**
 * 常用方法
 * 1、文件名
 *      getName() 文件名、路径名
 *      getPath()  路径名
 *      getAbsoluteFile() 绝对路径所对应的File对象
 *      getAbsolutePath() 绝对路径名
 *      getParent() 返回父目录
 *   
 * 2、判断信息
 *      exists()
 *      canWrite()
 *      canRead()
 *      isFile()
 *      isDirectory()  
 *      isAbsolute()   消除平台差异,如以盘符开头,其他以/开头        
 * 3、长度(字节数) 不能读取文件夹的长度
 *      
 * 4、创建、删除文件
 *      createNewFile  创建新文件,如果不存在,进行创建;如果存在,返回false。
 *      临时文件
 */</span>

@SuppressWarnings(<span class="hljs-string">"all"</span>)
<span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> Demo03 {
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span>(String[] args) {
        test01();
        System.<span class="hljs-keyword">out</span>.println(<span class="hljs-string">"========"</span>);
        test02();
        System.<span class="hljs-keyword">out</span>.println(<span class="hljs-string">"========"</span>);
        <span class="hljs-keyword">try</span> {
            test03();
        } <span class="hljs-keyword">catch</span> (IOException e) {
            e.printStackTrace();
            System.<span class="hljs-keyword">out</span>.println(<span class="hljs-string">"文件操作失败"</span>);
        }
    }

    <span class="hljs-comment">//1、获取文件名称</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">test01</span>()
    {
        <span class="hljs-comment">//File src = new File("E:/xp/test/2.jpg");</span>
        File src = <span class="hljs-keyword">new</span> File(<span class="hljs-string">"test/2.txt"</span>);
        System.<span class="hljs-keyword">out</span>.println(src.getName());<span class="hljs-comment">//名称</span>
        <span class="hljs-comment">//如果是绝对路径,返回完整路径,否则相对路径</span>
        System.<span class="hljs-keyword">out</span>.println(src.getPath());
        <span class="hljs-comment">//返回绝对路径</span>
        System.<span class="hljs-keyword">out</span>.println(src.getAbsolutePath());
        <span class="hljs-comment">//返回上一级目录,如果是相对路径,可能返回null;如new File("2.txt");</span>
        System.<span class="hljs-keyword">out</span>.println(src.getParent());
    }

    <span class="hljs-comment">//2、判断信息    读取相关信息,不是读取内容,而是位置,大小,占用空间,创建时间等属性</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">test02</span>()
    {
        <span class="hljs-comment">//String path = "2.txt";</span>
        String path = <span class="hljs-string">"G:/love.txt"</span>;
        File src = <span class="hljs-keyword">new</span> File(path);      
        System.<span class="hljs-keyword">out</span>.println(<span class="hljs-string">"文件是否存在:"</span>+src.exists());     
        <span class="hljs-comment">//是否可读写</span>
        System.<span class="hljs-keyword">out</span>.println(<span class="hljs-string">"文件是否可写:"</span>+src.canWrite());       
        <span class="hljs-comment">//isFile()、isDirectory()        </span>
        <span class="hljs-keyword">if</span>(src.isFile())
        {
            System.<span class="hljs-keyword">out</span>.println(<span class="hljs-string">"文件"</span>);   
        }   
        <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(src.isDirectory()) {
            System.<span class="hljs-keyword">out</span>.println(<span class="hljs-string">"文件夹"</span>);
        }
        <span class="hljs-keyword">else</span> {
            System.<span class="hljs-keyword">out</span>.println(<span class="hljs-string">"文件不存在"</span>);
        }       
        System.<span class="hljs-keyword">out</span>.println(<span class="hljs-string">"是否为绝对路径:"</span>+src.isAbsolute());
        System.<span class="hljs-keyword">out</span>.println(<span class="hljs-string">"长度为:"</span>+src.length());<span class="hljs-comment">//这个长度是字节数</span>
    }

    <span class="hljs-comment">//3、创建,删除文件</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">test03</span>() throws IOException
    {
        <span class="hljs-comment">//创建文件</span>
        <span class="hljs-comment">//con 系统关键字,不能创建成功。</span>
        String path = <span class="hljs-string">"F:/100.txt"</span>;
        File src = <span class="hljs-keyword">new</span> File(path);
        <span class="hljs-keyword">if</span>(!src.exists())
        {
            boolean flag = src.createNewFile();
            System.<span class="hljs-keyword">out</span>.println(flag?<span class="hljs-string">"创建成功"</span>:<span class="hljs-string">"创建失败"</span>);
        }

        <span class="hljs-comment">//删除文件</span>
        boolean flag = src.delete();
        System.<span class="hljs-keyword">out</span>.println(flag?<span class="hljs-string">"删除成功"</span>:<span class="hljs-string">"删除失败"</span>);

        <span class="hljs-comment">//static createTempFile(前缀3个字节长,后缀默认.temp) 默认临时空间</span>
        <span class="hljs-comment">//static createTempFile(前缀3个字节长,后缀默认.temp,目录)       </span>
        File temp = File.createTempFile(<span class="hljs-string">"tes"</span>, <span class="hljs-string">".temp"</span>,<span class="hljs-keyword">new</span> File(<span class="hljs-string">"G:/"</span>));        
        <span class="hljs-keyword">try</span> {
            Thread.sleep(<span class="hljs-number">2000</span>);
            temp.deleteOnExit();<span class="hljs-comment">//退出即删除</span>
        } <span class="hljs-keyword">catch</span> (InterruptedException e) {
            e.printStackTrace();
        }       
    }
}</code><ul style="FILTER: ; ZOOM: 1" class="pre-numbering"><li>1</li></ul>

运行结果:

<code class="hljs asciidoc has-numbering">2.txt
test\2.txt
G:\program\javase\IOFile\test\2.txt
<span class="hljs-header">test
========</span>
文件是否存在:true
文件是否可写:true
文件
是否为绝对路径:true
<span class="hljs-header">长度为:32
========</span>
创建成功
删除成功</code><ul style="FILTER: ; ZOOM: 1" class="pre-numbering"><li>1</li></ul>

四.创建目录

<code class="hljs java has-numbering"><span class="hljs-keyword">package</span> File;

<span class="hljs-keyword">import</span> java.io.File;
<span class="hljs-keyword">import</span> java.io.FilenameFilter;
<span class="hljs-javadoc">/**
 *  创建目录
 *  mkdir() 创建目录  必需确保父目录存在,如果不存在,创建失败。
 *  mkdirs() 创建目录  如果父目录链不存在,一同创建。
 *  String[] list()  文件|目录名   字符串形式
 *  File[] listFiles()  文件|目录名   File对象形式
 *  File[] listFiles(FilenameFilter filter)  过滤
 */</span>

<span class="hljs-annotation">@SuppressWarnings</span>(<span class="hljs-string">"all"</span>)
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Demo04</span> {</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span>(String[] args) {
        test01();
        test02();
    }

    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">test01</span>()
    {
        String path = <span class="hljs-string">"G:/try/123/123/325"</span>;
        File src = <span class="hljs-keyword">new</span> File(path);
        <span class="hljs-comment">//src.mkdir();</span>
        src.mkdirs();
        System.out.println(<span class="hljs-string">"创建成功。"</span>);
    }
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">test02</span>()
    {
        <span class="hljs-comment">//String path = "G:/try/123";</span>
        String path = <span class="hljs-string">"G:/work"</span>;
        File src = <span class="hljs-keyword">new</span> File(path);<span class="hljs-comment">//文件夹</span>
        <span class="hljs-keyword">if</span>(src.isDirectory())<span class="hljs-comment">//存在并且为目录</span>
        {
            System.out.println(<span class="hljs-string">"======子目录|子文件名 《字符串的表现形式》======"</span>);
            String[] subNames = src.list();
            <span class="hljs-keyword">for</span>(String temp:subNames)
            {
                System.out.println(temp);
            }

            System.out.println(<span class="hljs-string">"====子目录|子文件 《File对象》====="</span>);
            File[]  subFiles = src.listFiles();         
            <span class="hljs-keyword">for</span>(File temp:subFiles ) 
            {
                System.out.println(temp.getAbsolutePath());
            }

            System.out.println(<span class="hljs-string">"======子文件,Java对象======"</span>);
            <span class="hljs-comment">//命令设计模式</span>
            subFiles = src.listFiles(<span class="hljs-keyword">new</span> FilenameFilter() {
                <span class="hljs-javadoc">/**
                 * dir代表src
                 */</span>
                <span class="hljs-annotation">@Override</span>
                <span class="hljs-keyword">public</span> <span class="hljs-keyword">boolean</span> <span class="hljs-title">accept</span>(File dir, String name) {
                    <span class="hljs-comment">//System.out.println(dir.getName());</span>
                    <span class="hljs-comment">//System.out.println(dir.getAbsolutePath());</span>
                    <span class="hljs-comment">//必须是文件且后缀是.java</span>
                    <span class="hljs-keyword">return</span>  <span class="hljs-keyword">new</span> File (dir,name).isFile()&&name.endsWith(<span class="hljs-string">".rar"</span>);
                }
            });
            <span class="hljs-keyword">for</span>(File temp:subFiles)
            {
                System.out.println(temp.getAbsolutePath());
            }
        }
    }
}</code><ul style="FILTER: ; ZOOM: 1" class="pre-numbering"><li>1</li></ul>

运行结果:

<code class="hljs tex has-numbering">创建成功。
======子目录|子文件名======
123
324
dsafds.java
sdafd.java
新建文件夹 (3)
新建文件夹 (4)
====子目录|子文件File对象=====
G:<span class="hljs-command">\try</span>\123\123
G:<span class="hljs-command">\try</span>\123\324
G:<span class="hljs-command">\try</span>\123<span class="hljs-command">\dsafds</span>.java
G:<span class="hljs-command">\try</span>\123<span class="hljs-command">\sdafd</span>.java
G:<span class="hljs-command">\try</span>\123<span class="hljs-command">\新</span>建文件夹 (3)
G:<span class="hljs-command">\try</span>\123<span class="hljs-command">\新</span>建文件夹 (4)
======子文件,Java对象======
G:<span class="hljs-command">\try</span>\123<span class="hljs-command">\dsafds</span>.java
G:<span class="hljs-command">\try</span>\123<span class="hljs-command">\sdafd</span>.java</code><ul style="FILTER: ; ZOOM: 1" class="pre-numbering"><li>1</li></ul>

五.输出子孙级目录或文件的名称

<code class="hljs java has-numbering"><span class="hljs-keyword">package</span> File;

<span class="hljs-keyword">import</span> java.io.File;
<span class="hljs-keyword">import</span> java.util.Arrays;

<span class="hljs-javadoc">/**
 * 输出子孙级目录|文件的名称
 * 1、listFile()
 * 2、递归
 * 
 * static listRoots() 根路径
 *<span class="hljs-javadoctag"> @author</span> liguodong
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Demo05</span> {</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span>(String[] args) {
        String path = <span class="hljs-string">"G:/try/123"</span>;
        File parent = <span class="hljs-keyword">new</span> File(path);
        printName(parent);
        System.out.println(<span class="hljs-string">"----------"</span>);
        File[] roots = File.listRoots();
        System.out.println(Arrays.toString(roots));
    }

    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">printName</span>(File src){
        <span class="hljs-keyword">if</span>(<span class="hljs-keyword">null</span>==src||!src.exists()){
            <span class="hljs-keyword">return</span>;
        }
        System.out.println(src.getAbsolutePath());
        <span class="hljs-keyword">if</span>(src.isDirectory()){
            <span class="hljs-keyword">for</span>(File sub:src.listFiles()){
                printName(sub);
            }
        }
    }
}</code><ul style="FILTER: ; ZOOM: 1" class="pre-numbering"><li>1</li></ul>

运行结果:

<code class="hljs tex has-numbering">G:<span class="hljs-command">\try</span>\123
G:<span class="hljs-command">\try</span>\123\123
G:<span class="hljs-command">\try</span>\123\123\325
G:<span class="hljs-command">\try</span>\123\432
G:<span class="hljs-command">\try</span>\123\432\1.txt
G:<span class="hljs-command">\try</span>\123\432\2.txt
G:<span class="hljs-command">\try</span>\123\432\3.txt
G:<span class="hljs-command">\try</span>\123\4344
----------
<span class="hljs-special">[</span>C:<span class="hljs-command">\,</span> D:<span class="hljs-command">\,</span> E:<span class="hljs-command">\,</span> F:<span class="hljs-command">\,</span> G:<span class="hljs-command">\,</span> H:<span class="hljs-command">\,</span> K:<span class="hljs-command">\]</span></code>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值