众所周知,我们电脑中有许许多多的文件夹和文件,文件的形式也有许多不同的格式,文件夹中也可以新建文件夹的存在,也就是多层的一步一步的嵌套。

我们想要实现I/O操作,就必须知道硬盘上文件的表现形式。

而Java就提供了一个类FIle供我们使用。

File:

  文件和目录(文件夹)路径名的抽象表现形式

构造方法:  

  File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
  File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。
  File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例。

以上三种的方式实现的效果一样,但是具体要使用哪种构造方法,就得看情况去使用

代码体现:

 package com.wyh.File文件;

 import java.io.File;

 /**

  * 创建时间:2019年11月30日 下午12:59:33

  * 项目名称:practise09_IO流(2)

  * @author WYH

  * @version 1.0

  * @since JDK 1.8.0

  * 文件名称:FileDemo1.java

  * 类说明:
* File 文件和目录路径名的抽象表示。
* File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
* File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。
* File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例。
*/ public class FileDemo1 {
public static void main(String[] args) {
//File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
File file1 = new File("D://Test//a.txt"); //File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。
File file2 = new File("D://Test","a.txt"); //File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例。
File file3 = new File("D://Test");
File file4 = new File(file3,"a.txt"); } }

说完了怎么获取到实例,就要去操作它,我们首先想到的是怎么用代码实现新建文件夹和文件,还有如何一次性创建多级文件夹呢?

  boolean createNewFile() 当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。 如果当前文件存在就返回False
  boolean mkdir() 创建由此抽象路径名命名的目录。 如果当前文件夹存在就返回False
  boolean mkdirs()创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。 简单来说就是创建多级目录,如果该文件夹目录存在,就返回false

代码实现:(注意:到底是创建文件还是文件价你最清楚,不要调用错了。

 package com.wyh.File文件;

 import java.io.File;
import java.io.IOException; /**
*
* 创建时间:2019年11月30日 下午12:59:33
*
* 项目名称:practise09_IO流(2)
*
* @author WYH
*
* @version 1.0
*
* @since JDK 1.8.0
*
* 文件名称:FileDemo1.java
*
* 类说明: File 文件和目录路径名的抽象表示。
* boolean createNewFile() 当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。 如果当前文件存在就返回False
* boolean mkdir() 创建由此抽象路径名命名的目录。 如果当前文件夹存在就返回False
* boolean mkdirs()创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。 简单来说就是创建多级目录,如果该文件夹目录存在,就返回false
*
*
*/ public class FileDemo2 {
public static void main(String[] args) throws IOException {
// boolean mkdir() 创建由此抽象路径名命名的目录。
File file1 = new File("D://Test//demo");
System.out.println("mkdir():" + file1.mkdir()); // boolean createNewFile() 当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。
File file2 = new File("D://Test//demo//a.txt");
System.out.println("createNewFile():" + file2.createNewFile()); //boolean mkdirs()创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。 简单来说就是创建多级目录,如果该文件夹目录存在,就返回false
File file3 = new File("D://aaa//bbb//ccc");
System.out.println("mkdirs():"+file3.mkdirs()); //boolean mkdirs() 例子2
43 //该方法只能创建文件夹
44 //骑白马的不一定是王子,也可能是唐僧
45 //创建了wyh文件夹里再创建了叫作a.txt的文件夹

File file4 = new File("D://wyh//a.txt");
System.out.println("mkdirs():"+file4.mkdirs()); } }

那么。我们学会了如何创建,就紧接着就是如何删除呢?

delete()

  1、删除文件和文件夹,如果在创建文件或者文件夹的时候,忘记写盘符了,默认路径是项目路径下
  2、Java中的删除不走回收站
  3、如果要删除一个文件夹,请注意该文件夹下面不能有文件夹和文件

代码实现:

 package com.wyh.File文件;

 import java.io.File;
import java.io.IOException; /**
*
* 创建时间:2019年11月30日 下午12:59:33
*
* 项目名称:practise09_IO流(2)
*
* @author WYH
*
* @version 1.0
*
* @since JDK 1.8.0
*
* 文件名称:FileDemo1.java
*
* 类说明:
* 1、删除文件和文件夹,如果在创建文件或者文件夹的时候,忘记写盘符了,默认路径是项目路径下
* 2、Java中的删除不走回收站
* 3、如果要删除一个文件夹,请注意该文件夹下面不能有文件夹和文件
*/ public class FileDemo3 {
public static void main(String[] args) throws IOException {
File file1 = new File("a.txt");
System.out.println("a.txt:"+file1.createNewFile()); File file2 = new File("aaa//bbb//ccc");
System.out.println("file2:"+file2.mkdirs()); File file3 = new File("a.txt");
System.out.println("删除文件:"+file3.delete()); File file4 = new File("aaa//bbb//ccc");
System.out.println("删除文件夹:"+file4.delete()); //如果要删除一个文件夹,请注意该文件夹下面不能有文件夹和文件
File file5 = new File("aaa");
System.out.println("删除文件夹:"+file5.delete()); } }

再后来,我们在现实生活中,更多的会在新建文件夹或者文件之后就会去重命名这个文件夹或者是文件,那么如何给文件夹或者文件重命名呢?

如果路径不一致会发生什么呢?我们来看看:

 package com.wyh.File文件;

 import java.io.File;
import java.io.IOException; /**
*
* 创建时间:2019年11月30日 下午12:59:33
*
* 项目名称:practise09_IO流(2)
*
* @author WYH
*
* @version 1.0
*
* @since JDK 1.8.0
*
* 文件名称:FileDemo4.java
*
* 类说明:
* 重命名
*
*/ public class FileDemo4 {
public static void main(String[] args) throws IOException {
/*//如果路径一致,那么就是重命名
File file1 = new File("timg.jpg");
File newFile = new File("刘昊然.jpg");
System.out.println("renameTo:"+file1.renameTo(newFile));*/ //如果路径不一致,那么就是剪切并且重命名
File file2 = new File("刘昊然.jpg");
File newFile2 = new File("D://帅气的刘昊然.jpg");
System.out.println("renameTo2:"+file2.renameTo(newFile2)); } }

经过观察结果发现,

  1、如果路径一致,那么得到的效果就是重命名

  2、如果路径不一致,那么得到的效果就是剪切并且重命名

好了,到这里,我们掌握了如何创建,删除和重命名这些基本的操作,但是呢,如果想要结合操作,这些方法肯定是不够的。

我们来看看File类的判断功能:

    boolean isDirectory() 测试此抽象路径名表示的文件是否为目录。
    boolean isFile() 测试此抽象路径名表示的文件是否为普通文件。
    boolean isHidden() 测试此抽象路径名命名的文件是否为隐藏文件。
    boolean exists() 测试此抽象路径名表示的文件或目录是否存在。
    boolean canRead() 测试应用程序是否可以读取由此抽象路径名表示的文件。
    boolean canWrite() 测试应用程序是否可以修改由此抽象路径名表示的文件。

代码实现:

 package com.wyh.File文件;

 import java.io.File;
import java.io.IOException; /**
*
* 创建时间:2019年11月30日 下午12:59:33
*
* 项目名称:practise09_IO流(2)
*
* @author WYH
*
* @version 1.0
*
* @since JDK 1.8.0
*
* 文件名称:FileDemo4.java
*
* 类说明:
* 判断功能
* boolean isDirectory() 测试此抽象路径名表示的文件是否为目录。
* boolean isFile() 测试此抽象路径名表示的文件是否为普通文件。
* boolean isHidden() 测试此抽象路径名命名的文件是否为隐藏文件。
* boolean exists() 测试此抽象路径名表示的文件或目录是否存在。
* boolean canRead() 测试应用程序是否可以读取由此抽象路径名表示的文件。
* boolean canWrite() 测试应用程序是否可以修改由此抽象路径名表示的文件。
*
*
*/ public class FileDemo5 {
public static void main(String[] args) throws IOException {
File file = new File("a.txt");
System.out.println("isDirectory():"+file.isDirectory());
System.out.println("isFile():"+file.isFile());
System.out.println("isHidden():"+file.isHidden());
System.out.println("exists():"+file.exists());
System.out.println("canRead():"+file.canRead());
System.out.println("canWrite():"+file.canWrite()); } }

说完了判断功能,我们在想想,有时候我们会在一个软件发送或者接收的时候,是不是都会弹出来给你去选择,这些文件(夹)名和一些属性,是怎么来的呢?

说明File类还有一种功能,那就是获取功能:

先来说说基本的获取功能:

    String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。
    String getPath() 将此抽象路径名转换为路径名字符串。
    String getName() 返回由此抽象路径名表示的文件或目录的名称。
    long lastModified() 返回此抽象路径名表示的文件上次修改的时间。 拿到的是毫秒值
    long length() 返回由此抽象路径名表示的文件的长度。 字节数

代码实现:

 package com.wyh.File文件;

 import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date; /**
*
* 创建时间:2019年11月30日 下午12:59:33
*
* 项目名称:practise09_IO流(2)
*
* @author WYH
*
* @version 1.0
*
* @since JDK 1.8.0
*
* 文件名称:FileDemo6.java
*
* 类说明:
* 基本获取功能:
* String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。
* String getPath() 将此抽象路径名转换为路径名字符串。
* String getName() 返回由此抽象路径名表示的文件或目录的名称。
* long lastModified() 返回此抽象路径名表示的文件上次修改的时间。 拿到的是毫秒值
* long length() 返回由此抽象路径名表示的文件的长度。 字节数
*
*
*/ public class FileDemo6 {
public static void main(String[] args) throws IOException {
File file = new File("demo//test.txt");
System.out.println("getAbsolutePath():"+file.getAbsolutePath());
System.out.println("getPath():"+file.getPath());
System.out.println("getName():"+file.getName());
System.out.println("lastModified():"+file.lastModified());
System.out.println("length():"+file.length()); //1575107921343毫秒值
Date d = new Date(1575107921343L);
SimpleDateFormat sdf = new SimpleDateFormat();
String s = sdf.format(d);
System.out.println(s); //19-11-30 下午5:58 } }

这里大家也发现了,我们用 lastModified() 方法获取的是最后一次修改的时间,但是返回的是毫秒值,我们需要手动将它进行转化一下

说完基本的获取功能,那么猜猜看接下来是什么,与基本相对的那就是高级的:

高级获取功能:
    public String[] list() 返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
    public File[] listFiles() 返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。

这里要注意的是,这两个方法的返回值类型:一个是String[]数组,一个是File[]类型的数组,区别大家应该都想到了,一个是获取的是文件名数组,一个是文件的数组,通过调用方法就可以拿到文件夹或者文件名

代码实现:

 package com.wyh.File文件;

 import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date; /**
*
* 创建时间:2019年11月30日 下午12:59:33
*
* 项目名称:practise09_IO流(2)
*
* @author WYH
*
* @version 1.0
*
* @since JDK 1.8.0
*
* 文件名称:FileDemo6.java
*
* 类说明:
* 高级获取功能:
* public String[] list() 返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
* public File[] listFiles() 返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。
*
*
*/ public class FileDemo7 {
public static void main(String[] args) throws IOException {
File file = new File("D://");
// String[] files = file.list();
// for(String s : files){
// System.out.println(s);
// } System.out.println("==================================");
File[] files2 = file.listFiles();
for(File f : files2){
if("BIG_DATA_CLASS".equals(f.getName())){
String[] s2 = f.list();
for(String s : s2){
System.out.println(s);
}
}
// System.out.println(f.getName());
} } }

说了那么久,来举个小案例练练手:判断D盘下面是否有.jpg文件(注意,一定要进行判断是否是文件!!)

代码实现:

 package com.wyh.File文件;

 import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date; /**
*
* 创建时间:2019年11月30日 下午12:59:33
*
* 项目名称:practise09_IO流(2)
*
* @author WYH
*
* @version 1.0
*
* @since JDK 1.8.0
*
* 文件名称:FileDemo6.java
*
* 类说明:
* 判断D盘下面是否有.jpg文件(注意,一定要进行判断是否是文件!!)
*
*
*/ public class FileDemo8 {
public static void main(String[] args) throws IOException {
File file = new File("D://");
File[] files = file.listFiles();
for(File f : files){
if(f.isFile()){ //一定要进行判断是否是文件!!,因为有可能文件夹名也是以.jpg结尾的
if(f.getName().endsWith(".jpg")){
System.out.println(f.getName());
}else{
continue;
}
} }
} }

从上面的代码我们可以看出实现了,但是有没有更好的办法呢?

那就是文件名称过滤器,这个是调用构造方法的时候,重写接口中的一个方法,为了方便,这里我使用匿名内部类的方式实现

 package com.wyh.File文件;

 import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date; /**
*
* 创建时间:2019年11月30日 下午12:59:33
*
* 项目名称:practise09_IO流(2)
*
* @author WYH
*
* @version 1.0
*
* @since JDK 1.8.0
*
* 文件名称:FileDemo6.java
*
* 类说明:
* 文件名称过滤
* File[] listFiles(FilenameFilter filter) 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
* String[] list(FilenameFilter filter) 返回一个字符串数组,命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录。
*
*
*/ public class FileDemo8_2 {
public static void main(String[] args) throws IOException {
File file = new File("D://"); String[] s = file.list(new FilenameFilter() { @Override
public boolean accept(File dir, String name) {
//返回true添加,返回false就不添加
/*//方式1
File files = new File(dir,name);
boolean flag = files.isFile();
boolean flag1 = files.getName().endsWith(".jpg");
return flag && flag1;*/ //方式2 (方式 1的优化)
return new File(dir,name).isFile() && name.endsWith(".jpg"); }
}); for(String s1 : s){
System.out.println(s1);
} } }

至于为什么是为true就加入到其中,false就不加入呢?具体的我们跟进看源码

好了,到此,我们对File类的使用算是有点了解了。

大数据之路week05--day01(I/O流阶段一 之File)的更多相关文章

  1. 大数据之路week04--day06(I/O流阶段一 之异常)

    从这节开始,进入对I/O流的系统学习,I/O流在往后大数据的学习道路上尤为重要!!!极为重要,必须要提起重视,它与集合,多线程,网络编程,可以说在往后学习或者是工作上,起到一个基石的作用,没了地基,房 ...

  2. C#码农的大数据之路 - 使用C#编写MR作业

    系列目录 写在前面 从Hadoop出现至今,大数据几乎就是Java平台专属一般.虽然Hadoop或Spark也提供了接口可以与其他语言一起使用,但作为基于JVM运行的框架,Java系语言有着天生优势. ...

  3. 胖子哥的大数据之路(11)-我看Intel&&Cloudera的合作

    一.引言 5月8日,作为受邀嘉宾,参加了Intel与Cloudera在北京中国大饭店新闻发布会,两家公司宣布战略合作,该消息成为继Intel宣布放弃大数据平台之后的另外一个热点新闻.对于Intel的放 ...

  4. 胖子哥的大数据之路(10)- 基于Hive构建数据仓库实例

    一.引言 基于Hive+Hadoop模式构建数据仓库,是大数据时代的一个不错的选择,本文以郑商所每日交易行情数据为案例,探讨数据Hive数据导入的操作实例. 二.源数据-每日行情数据 三.建表脚本 C ...

  5. 胖子哥的大数据之路(9)-数据仓库金融行业数据逻辑模型FS-LDM

    引言: 大数据不是海市蜃楼,万丈高楼平地起只是意淫,大数据发展还要从点滴做起,基于大数据构建国家级.行业级数据中心的项目会越来越多,大数据只是技术,而非解决方案,同样面临数据组织模式,数据逻辑模式的问 ...

  6. 胖子哥的大数据之路(7)- 传统企业切入核心or外围

    一.引言 昨天和一个做互联网大数据(零售行业)的朋友交流,关于大数据传统企业实施的切入点产生了争执,主要围绕两个问题进行了深入的探讨: 问题1:对于一个传统企业而言什么是核心业务,什么是外围业务? 问 ...

  7. 胖子哥的大数据之路(6)- NoSQL生态圈全景介绍

    引言: NoSQL高级培训课程的基础理论篇的部分课件,是从一本英文原著中做的摘选,中文部分参考自互联网.给大家分享. 正文:  The NoSQL Ecosystem 目录 The NoSQL Eco ...

  8. 胖子哥的大数据之路(四)- VisualHBase功能需求框架

    一.引言 大数据在结构化数据存储方面的应用需求越来越明确,但是大数据环境下辅助开发工具的不完善,给数据库管理人员和开发人员带来的不变难以言表,基于此创建了开源项目VisualHBase,同时创建了Vi ...

  9. 大数据之路week01--自学之集合_1(Collection)

    经过我个人的调查,发现,在今后的大数据道路上,集合.线程.网络编程变得尤为重要,为什么? 因为大数据大数据,我们必然要对数据进行处理,而这些数据往往是以集合形式存放,掌握对集合的操作非常重要. 在学习 ...

随机推荐

  1. 【计算机视觉】OPENCV对于有alpha通道的透明背景图片的读取和图片叠加

    这个是我自己做的粗略的螺旋丸的图,导出为png并带有alpha通道. 最后和一只狗合成成这个样子. 效果还是可以的. 为了实现这个效果,首先我们要明白具有透明通道的图片的OpenCV的读取方式.在Op ...

  2. 【ARM-Linux开发】TI 关于Gstreamer使用的几个参考

    http://processors.wiki.ti.com/index.php/Example_GStreamer_Pipelines#H.264_RTP_Streaming http://proce ...

  3. Leetcode739 - Daily Temperatures

    题目描述 Leetcode 739 本题考察了栈的使用.题目输入是一段温度值列表,然后返回一个列表.这个列表包含了输入列表中每一天还有多少天温度升高.如果未来没有升高的情况,则输入 0. # Exam ...

  4. ABP中的本地化处理(上)

    今天这篇文章主要来总结一下ABP中的多语言是怎么实现的,在后面我们将结合ABP中的源码和相关的实例来一步步进行说明,在介绍这个之前我们先来看看ABP的官方文档,通过这个文档我们就知道怎样在我们的系统中 ...

  5. Docker部署Gitlab11.10.4

    1.下载镜像 官方镜像地址:https://hub.docker.com/r/gitlab/gitlab-ce ,根据自己需要下载指定版本 [root@vanje-dev01 ~]# docker p ...

  6. C++视频读取与视频保存

    VideoCapture cap("E:\\122.avi"); //计算视频帧数 int VedioFPS = cap.get(CV_CAP_PROP_FPS); //cout ...

  7. 剑指offer58:对称的二叉树。判断一颗二叉树是不是对称的,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的

    1 题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 2 思路和方法 定义一种遍历算法,先遍历右子结点再遍历左子结点:如对称先序 ...

  8. LeetCode. 3的幂

    题目要求: 给定一个整数,写一个函数来判断它是否是 3 的幂次方. 示例: 输入: 27 输出: true 代码: class Solution { public: bool isPowerOfThr ...

  9. stal 安装

    1.1 准备实验环境: 安装系统 1)硬件配置如下 2) 先把光标放到”install CentOS 7”,按 Tab键编辑内核参数,添加 (net.ifnames=0 biosdevname=0) ...

  10. 搭建SSM环境(淘淘商城)

    本文用到的资料: 链接:https://pan.baidu.com/s/1Pk_aI_PRbqRFP9i3o9Xodg 提取码:o4o4 1.1. 数据库 1.1.1. 使用navicat创建数据库连 ...