学习Java必备的基础知识打卡12.20,要想学好必须扎实基本功(⭐建议收藏)#yyds干货盘点#
Posted java厂长
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习Java必备的基础知识打卡12.20,要想学好必须扎实基本功(⭐建议收藏)#yyds干货盘点#相关的知识,希望对你有一定的参考价值。
Day26-Java之IO—File类
@[toc]
关于作者
• 作者介绍
基本操作
如果要想学好IO,必须要清楚抽象类、IO的操作部分掌握两个代码模型。IO的核心组成五个类(File、OutputStream、InputStream、Writer、Reader)一个接口(Serializable)。
再java.io是一个与文本本身操作有关的程序(创建、删除、信息取得---)
如果要想使用File类操作文件的话,那么肯定要通过构造方法实例化File类对象,而实例化File类对象的过程之中主要使用以下两种构造方法:
- 方法一:public File(String pathname);
- 方法二:public File(File parent,String child).
文件的基本操作,主要有以下几种功能:
-
创建一个新文件:public boolean createNewFile() throws IOException
-
删除文件:public Boolean delete();
- 判断路径是否存在:public Boolean exists();
package com.day14.demo;
import java.io.File;
import java.io.IOException;
public class FileDemo
public static void main(String[] args) throws IOException
File file = new File("f:\\\\hello.txt");
file.createNewFile();
package com.day14.demo;
import java.io.File;
import java.io.IOException;
public class FileDemo
public static void main(String[] args) throws IOException
File file = new File("f:\\\\hello.txt");
if(file.exists())//文件存在
file.delete();
else//文件不存在
file.createNewFile();//创建文件
本程序操作就表示如果文件存在则删除,如果不存在则创建一个新的文件,此时基本功能是实现了,不过这个程序此时存在三个问题:
在windows操作之中,使用“\\”作为路径分隔符,而在Linux系统下使用“/”作为路径分隔符,而实际的开发而言,大部分情况下会在windows中做开发,而后将项目部署在Linus,那么此时,路径的分隔符都需要进行修改,这样实在是国语麻烦,为此在File类之中提供了一个常量:public static final String separator(按照Java的命名规范来讲,对于全局常量应该使用大写字母的方式定义,而此处使用的是小写,是由Java的发展历史所带来的问题)。
//由不同的操作系统的JVM来决定最终的separator是什么内容File file = new File("f:" + File.separator + "hello.txt");
发现程序执行完成之后,对于文件的创建或者是删除是会存在一些操作上的延迟,如果现在假设先删除了一个文件,而后立刻判断此文件是否存在,那么可能得到的结果就是错误的(为true),一位所有的*.class文件都要通过JVM与操作系统间接操作,这样就有可能会出现延迟的问题。
之前进行文件创建的时候都是在根目录下创建完成的,如果说现在要创建的文件有目录呢?例如,现在要创建一个f:\\hello\\hello.txt文件,而此时在执行程序的时候hello目录不存在,这个时候执行的话就会出现错误提示:
Exception in thread "main" java.io.IOException: 系统找不到指定的路径。
因为现在目录不存在,所以不能创建,那么这个时候必须首先判断要创建文件的父路径是否存在,如果不存在应该创建一个目录,之后再进行文件的创建,而要想完成这样的操作,需要一下几个方法支持:
找到一个指定文件的父路径:public File getParentFile();
创建目录:public boolean mldirs()。
package com.day14.demo;
import java.io.File;
import java.io.IOException;
public class FileDemo
public static void main(String[] args) throws IOException
//由不同的操作系统的JVM来决定最终的separator是什么内容
File file = new File("f:" + File.separator +"hello" + File.separator + "hello.txt");
if(!file.getParentFile().exists())//父目录
file.getParentFile().mkdirs();//创建父目录
if(file.exists())//文件存在
file.delete();
else//文件不存在
file.createNewFile();//创建文件
以后在任何的java.io.File类开发过程之中,都一定要考虑文件目录的问题。
取得文件信息
在File类之中还可以通过以下的方法取得一些文件的基本信息:
方法名称 | 描述 |
---|---|
public String getName() | 取得文件的名称 |
public boolean isDirectory() | 给定的路径是否为文件夹 |
public boolean isFile() | 给定的路径是否是文件 |
public boolean isHidden() | 是否是隐藏文件 |
public long lastModified() | 文件的最后一次修改日期 |
public long length() | 取得文件大小,是以字节为单位返回的。 |
public class FileDemo2
public static void main(String[] args)
File file = new File("f:" + File.separator + "701_03_支付宝沙箱使用.avi");
if(file.exists() && file.isFile())
System.out.println("1文件大小为:" + MyMath.round(file.length() / (double) 1024 / 1024, 2));
System.out.println("最后一次修改日期:"+ new SimpleDateFormat("YYYY-MM-dd HH:mm:ss").format(new Date(file.lastModified())));
System.out.println("2文件大小为:" + new BigDecimal(file.length() / (double)1024 /1024).divide(new BigDecimal(1), 2, BigDecimal.ROUND_HALF_UP).doubleValue());
列出目录内容:public File [] listFiles(),此方法将目录中的所有文件以File对象数组的方式返回;
package com.day14.demo;
import java.io.File;
import java.util.Arrays;
public class FileDemo3
public static void main(String[] args)
File file = new File("f:" + File.separator);
if(file.exists() && file.isDirectory())
File[] listFiles = file.listFiles();
System.out.println(Arrays.toString(listFiles));
综合案例:目录列表
现在希望把一个目录下的全部文件都列出来,那么这种情况下只能采用递归:因为列出一个目录下的全部文件或着文件夹之后,如果发现列出的内容是文件夹,则应该向后继续列出。
package com.day14.demo;
import java.io.File;
public class FileListDemo
public static void main(String[] args)
File file = new File("f:" + File.separator);
list(file);
public static void list(File file)
if(file.isDirectory())
File[] files = file.listFiles();
if(files != null)
for (int i = 0; i < files.length; i++)
list(files[i]);//继续列出
System.out.println(file);
现在代码都在main线程下执行,如果该程序执行完成后才能继续执行下一条语句,要想解决这种耗时的问题。最好产生一个新的线程进行列出。
package com.day14.demo;
import java.io.File;
public class FileListDemo
public static void main(String[] args)
new Thread(()->
File file = new File("f:" + File.separator);
list(file);
,"列出线程").start();
System.out.println("开始进行文件信息列出。。。。");
public static void list(File file)
if(file.isDirectory())
File[] files = file.listFiles();
if(files != null)
for (int i = 0; i < files.length; i++)
list(files[i]);//继续列出
System.out.println(file);
以上是关于学习Java必备的基础知识打卡12.20,要想学好必须扎实基本功(⭐建议收藏)#yyds干货盘点#的主要内容,如果未能解决你的问题,请参考以下文章
学习Java必备的基础知识打卡12.16,要想学好必须扎实基本功(⭐建议收藏)#yyds干货盘点#
学习Java必备的基础知识打卡12.19,要想学好必须扎实基本功(⭐建议收藏)#yyds干货盘点#
学习Java必备的基础知识打卡12.22,要想学好必须扎实基本功(⭐建议收藏)#yyds干货盘点#
学习Java必备的基础知识打卡12.23,要想学好必须扎实基本功(⭐建议收藏)#yyds干货盘点#