JavaIO——File类
1、File文件类
File类(描述具体文件或文件夹的类):是唯一一个与文件本身操作有关的程序类,可完成文件的创建、删除、取得文件信息等操作。但不能对文件的内容进行修改。
(1)File类的基本使用
File类只用于创建文件文身并不对其内容做任何处理。
Java.Io.File是一个普通的类,直接产生实例化对象,要想得到实例化对象则需用到其提供的构造方法。
A. File类中提供的构造方法
public File(String pathname):其中pathname位要传入对象的绝对路径。
public File(String parent, String child):设置父路径和子路径。
B. File类中的普通方法
判断文件是否存在:public boolean exists()
创建文件:public boolean createNewFile()
删除文件:public boolean delete()
-
package myIO;
-
-
import java.io.File;
-
import java.io.IOException;
-
-
public class Test {
-
public static void main(String[] args) {
-
//定义要操作文件的路径
-
File file = new File("C:\\Users\\lenovo\\Desktop\\TestIo.java");
-
//查找指定文件是否存在(不存在返回false,反之亦然)
-
System.out.println(file.exists());
-
try {
-
//若指定文件不存在,则创建新文件
-
file.createNewFile();
-
//创建文件后打印文件是否存在
-
System.out.println(file.exists());
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
//对文件进行删除
-
file.delete();
-
//进行删除操作后打印文件是否存在
-
System.out.println("执行删除操作后文件存在与否?");
-
System.out.println(file.exists());
-
}
-
}
-
/*
-
* 实现程序:文件不存在则创建,存在则删除
-
* */
-
public class Test{
-
public static void main(String[] args) throws IOException {
-
File file = new File("C:\\\\Users\\\\lenovo\\\\Desktop\\\\TestIo.java");
-
if(!file.exists()) {
-
file.createNewFile();
-
}else {
-
file.delete();
-
}
-
}
-
}
上述方法应该是最简化的文件处理操作了,但是仍然存在问题:如Linux下文件路径的分隔符用“/”,而在windows下则用的是“\”;但是即便这样也不影响跨平台性,我们可以引入File类的一个常量"public static final String separator "来对其描述。
-
public class Test{
-
public static void main(String[] args) throws IOException {
-
//利用File类的常量来设置不同操作系统下的分隔符
-
//separator由不同操作系统下的JVM来决定到底是"/"还是"\"
-
String singal = File.separator;
-
File file = new File("C"+singal+"Users"+singal+"lenovo"
-
+singal+"Desktop"+singal+"TestIO.java");
-
System.out.println(file.exists());
-
if(file.exists()) {
-
file.createNewFile();
-
}else {
-
file.delete();
-
}
-
}
-
}
在Java中要进行文件的处理操作是要通过本地操作系统支持的,在这之中如果操作的是同名文件,就可能出现延迟的问题。(开发之中尽可能避免文件重名问题)
(2)目录操作
取得父路径:public String getParent() 返回当前的父路径
取得父File对象:public File getParentFile() 返回当前的父File对象
创建父目录: public boolean mkdirs() 有多少级就创建多少级
-
public class Test{
-
public static void main(String[] args) throws IOException {
-
String singal = File.separator;
-
File file = new File("G:"+singal+"lemon"+singal+"javaIO"
-
+singal+"TestIO.java");
-
if(!file.getParentFile().exists()) {
-
file.mkdirs();
-
}
-
}
-
}
若使用file.mkdirs()创建,则创建的为文件夹。而若使用file。getParentFile.mkdirs()创建时则为目录。
-
public class Test{
-
public static void main(String[] args) throws IOException {
-
String singal = File.separator;
-
File file = new File("G:"+singal+"lemon"+singal+"javaIO"
-
+singal+"TestIO.java");
-
//判断父目录是否存在
-
if(!file.getParentFile().exists()) {
-
file.getParentFile().mkdirs();
-
}
-
}
-
}
-
public class Test{
-
public static void main(String[] args) throws IOException {
-
String singal = File.separator;
-
File file = new File("G:"+singal+"lemon"+singal+"javaIO"
-
+singal+"TestIO.java");
-
//返回当前的父路径
-
System.out.println("返回当前的父路径");
-
System.out.println(file.getParent());
-
//返回当前父File对象
-
System.out.println("返回当前父File");
-
System.out.println(file.getParentFile());
-
//判断父目录是否存在
-
if(!file.getParentFile().exists()) {
-
//创建多级目录
-
file.getParentFile().mkdirs();
-
}
-
//若文件存在则删除
-
if(file.exists()) {
-
file.delete();
-
}else {
-
//文件不存在,则创建新文件
-
file.createNewFile();
-
}
-
}
()取得文件信息
判断路径是否是文件: public boolean isFile()
判断路径是否是目录: public boolean isDirectory()
取得文件大小(字节): public long length()
最后一次修改日期 : public long lastModified()
-
/*
-
* 取得文件信息
-
* */
-
-
public class Test{
-
public static void main(String[] args) {
-
String singal = File.separator;
-
File file = new File("G:"+singal+"lemon"+singal+"javaIO"
-
+singal+"TestIO.java");
-
//判断上级目录是否为文件
-
System.out.println("上级目录是否为文件?");
-
System.out.println(file.getParentFile().isFile());
-
//判断当前目录是否为文件
-
System.out.println("该目录下是否为文件?");
-
System.out.println(file.isFile());
-
//查看当前对象是否为路径
-
System.out.println("当前对象为路径?");
-
System.out.println(file.isDirectory());
-
//取得文件的大小
-
System.out.println("当前文件的大小为:");
-
long length = file.length();
-
System.out.println(length);
-
//取得文件的最后修改日期
-
System.out.println("当前文件的最后修改日期为:");
-
long date = file.lastModified();
-
System.out.println(date);
-
}
-
}
取得本地文件的相关信息:
-
/*
-
* 列出当前目录下所有的文件
-
* */
-
public class Test{
-
public static void main(String[] args) {
-
String singal = File.separator;
-
//要操作的文件
-
File file = new File("C:"+singal+"Users"+singal+"lenovo");
-
//保证是目录且存在
-
if(file.exists()&&file.isDirectory()) {
-
File[] result = file.listFiles();
-
for (File file2 : result) {
-
System.out.println(file2);
-
}
-
}
-
}
-
}
我们不难发现根据File类提供的listFiles可以取得本地文件的信息,但是这样只能取得第一级目录下的相关信息。若我们想要取得所有级的信息,则需要我们自己进行递归操作处理。
-
/*
-
* 打印当前目录下所有层级的文件信息
-
* */
-
public class Test{
-
public static void main(String[] args) {
-
String singal = File.separator;
-
//要操作的文件
-
File file = new File("D:"+singal+"Users"+singal+"lenovo");
-
listAllFileInfor(file);
-
}
-
public static void listAllFileInfor(File file) {
-
if(file.isDirectory()) {
-
//file对象是目录,列出子目录的信息
-
File[] files = file.listFiles();
-
for (File file2 : files) {
-
//进行递归,
-
listAllFileInfor(file2);
-
}
-
}else {
-
//当前操作的不是目录
-
System.out.println(file);
-
}
-
}
-
}
现在所有的代码都在main线程中执行,可以发现只有当listAllFileInfor没有执行完,main的后续操作也无法完成。正是因为这种耗时操作使得主线程出现了阻塞,而导致后续代码无法直接正常执行完毕。若不想让其别阻塞,我们需要重新起一个线程来对其进行操作。
-
/*
-
* 解决阻塞main线程,另起线程
-
* */
-
public class Test{
-
public static void main(String[] args) {
-
new Thread(()->{
-
String singal = File.separator;
-
//要操作的文件
-
File file = new File("G:"+singal+"lenmon");
-
listAllFileInfor(file);
-
},"输出线程").start();
-
System.out.println("main执行完毕");
-
}
-
public static void listAllFileInfor(File file) {
-
if(file.isDirectory()) {
-
//file对象是目录,列出子目录的信息
-
File[] files = file.listFiles();
-
for (File file2 : files) {
-
//进行递归,
-
listAllFileInfor(file2);
-
}
-
}else {
-
//当前操作的不是目录
-
System.out.println(file);
-
}
-
}
-
}
JavaIO——File类的更多相关文章
- JavaIO之File类
Java-IO之File类 Java-IO之File类 1. File类 1.1. File类说明 1.2. 体验 File 类 1.3. 构造一个 File 类实例: 1.4. 路径: 1.4.1. ...
- java基础知识回顾之javaIO类--File类应用:过滤器接口FilenameFilter和FileFilter
FilenameFilter和FileFilter都是用来过滤文件,例如过滤,以.jpg或者.java结尾的文件,通过看他们的源码:通过使用File类中String[] list(FilenameFi ...
- java基础知识回顾之javaIO类--File类
File类是对文件系统中文件以及目录(文件夹)进行封装的对象,可以通过面向对象的思想来操作文件和目录(文件夹).File类保存文件或目录的各种元素的信息,包括文件名,文件长度,最后修改日期,是否可读, ...
- JavaIO(01)File类详解
File类 file类中的主要方法和变量 常量: 表示路径的分割符:(windows) 作用:根据java可移植性的特点,编写路径一定要符合本地操作系统要求的分割符: public static ...
- JavaIO流——File类
1.掌握File 类的作用 2.可以使用File 类中的方法对文件进行操作 所有的 io 操作都保存在 java.io 包中. 构造方法:public File (String pathname) 直 ...
- Java基础---Java---IO流-----File 类、递归、删除一个带内容的目录、列出指定目录下文件夹、FilenameFilte
File 类 用来将文件或者文件夹封装成对象 方便对文件与文件夹进行操作. File对象可以作为参数传递给流的构造函数 流只用操作数据,而封装数据的文件只能用File类 File类常见方法: 1.创建 ...
- 总结JAVA----IO流中的File类
对于IO流中File类的总结 File类的基本概念 File类只能用于完成对于文件属性(是否存在.可读性.长度)的一些操作,不能用于文件的访问. File类的对象 File类的对象存储的是文件的绝对路 ...
- javaIO流(一)--File类的基本使用
一.File文件操作类 在java语言中提供有对于文件操作系统的支持,这个支持就在java.io.File类中进行了定义,也就是说在整个java.io包中File类是唯一一个与文件本身操作有关的类(创 ...
- 吴裕雄--天生自然JAVAIO操作学习笔记:File类
import java.io.File ; import java.io.IOException ; public class FileDemo01{ public static void main( ...
随机推荐
- linux 虚拟网络设备的使用
1. linux 常见虚拟网络设备分类 常见虚拟网络设备有:bridge, tun/tap, veth-pairs, macvlan, macvtap等.有一篇博文写的挺好的,图文并茂:虚拟网络设备, ...
- Java不同时区(timezone)之间时间转换
最近出现一个问题是这样的:我们的系统在国外打印的日志时间由于时差关系和国内不一致,看起来不方便,希望国外的日志和国内保持一致,即:需要对不同时区的时间做转换调整,统一为国内时间. 一.关于时区的一些概 ...
- Spring Security OAuth2 单点登录
1. OAuth 2.0 OAuth(Open Authorization)为用户资源的授权提供了一个安全的.开放而又简易的标准.最简单的理解,我们可以看一下微信OAuth2.0授权登录流程: 通过O ...
- 一款吊炸天的AI图片增强工具!
背景 如果你工作中需要制作文档,PPT,或者给文章配图,或者需要制作视频.一定会有在网上寻找图片素材的经历. 但网上的图质量参差不一,有时候找到了喜欢的图,但是质量不行,分辨率太低. 有的人就忍了,但 ...
- PTA 7-3 畅通工程之最低成本建设问题 (30分)
PTA 7-3 畅通工程之最低成本建设问题 (30分) 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括 ...
- 编译静态库的方式使用spdlog和fmt
前言 spdlog++库,而且支持header only方式,但header only的使用方式会造成编译时长增加,所以这里简单描述一下,其编译静态库的方式. 又因为spdlog还依赖另一个开源库fm ...
- Highcharts › 自由绘图
... <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title ...
- JVM 是用什么语言写的?
JAVA中就虚拟机是其它语言开发的,用的是C语言+汇编语言 基于此之上就是JAVA本身了 虚拟机只起到解析作用另外,JAVA并不比C语言慢,说JAVA慢一般是九十年代那时候的JAVA, 而现在 在 ...
- [atAGC007E]Shik and Travel
二分枚举答案,判定答案是否合法 贪心:每一个叶子只能经过一遍,因此叶子的顺序一定是一个dfs序,即走完一棵子树中的所有叶子才会到子树外 根据这个贪心可以dp,设$f[k][l][r]$表示仅考虑$k$ ...
- [noi1994]海盗
令$a_{i,j}(j\le i)$表示第i个人的方案中给第j个人$a_{i,j}$的钱,有以下性质: 1.如果第j个人一定同意(否则就会死)第i个人的方案,那么$a_{i,j}=0$(容易发现一定同 ...