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

我们想要实现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. angular入门 - 环境安装及项目创建

    1.安装node.js 下载,安装,在终端测试安装是否成功:node -v(查看nodejs版本) npm -v(查看npm版本) 下载地址:https://nodejs.org/en/downloa ...

  2. JavaScript中的Truthy和Falsy

    JavaScript中存在Truthy值和Falsy值的概念 — 除了boolean值true.false外,所有类型的JavaScript值均可用于逻辑判断,其规则如下: 1.所有的Falsy值,当 ...

  3. java中this的使用

    java中的this随处可见,用法也多,现在整理有几点:this1.当全局变量跟局部变量重名时,表示使用全局变量(此时this指代本类对象)例有一类class A{    String name;   ...

  4. Layui 上传图片到磁盘上 + Tomcat 配置虚拟路径

    Layui 上传图片到磁盘上 + Tomcat 配置虚拟路径 Tomcat 配置虚拟路径 找到 eclipse 中 tomcat 下面的 server.xml 文件,在 Host 标签里面添加 < ...

  5. Git在新电脑拉github 上的项目

    非小白教程.多少有点了解的才能看懂. 1,安装git 忽略,任意i找一个图文教程即可 2,在命令行模式 输入 cd ~/.ssh/  进入c:administrator的文件下的.ssh文件夹: 或者 ...

  6. Longest Line of Consecutive One in Matrix

    Given a 01 matrix, find the longest line of consecutive 1 in the matrix. The line could be horizonta ...

  7. 关于c++模板非类型参数中指针和引用类型必须为全局或者静态变量的问题

    之前在学习c++模板的时候,一直没留意到在非类型参数中对指针和引用有着一些限制,今早在复学模板的时候才注意到书上标明,指针和引用作为模板的非类型参数传递时必须要求是全局或者静态变量.其实不难想到,模板 ...

  8. Merkle树

    在分布式系统.P2P应用中或者是区块链中,会经常使用一种数据结构Merkle tree(默克尔树),这里我们将详细讨论一下这个常用数据结构. Merkle tree Merkle树看起来非常像二叉树, ...

  9. (三)Lucene之删除更新文档以及luke的基本使用

    一.demo 本例中采用单元测试,故在pom.xml中引入junit jar包 1.1 前提: public class IndexTest { /** *数据准备 */ private String ...

  10. 【转载】Java枚举的使用

    枚举类型可以取代以往常量的定义方式,即将常量封装在类或接口中.此外,枚举类型还提供了安全检查功能.枚举类型本质上还是以类的形式存在. 1.使用枚举类型设置常量以往设置常量,通常将常量放置在接口中,这样 ...