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>