File类

File类在java.io包中。io代表input和output,输入和输出。

代表与平台无关的文件和目录。

可以新建、删除、重命名,但不能访问文件内容。

File类里的常量:

import java.io.File;
public class TestFileConst {
public static void main(String[] args) {
String s = "";
// 文件分隔符:win反斜杠(\)linux正斜杠(/)
s = File.separator;
System.out.println(s);
// 路径分隔符:win分号(;)linux冒号(:)
s = File.pathSeparator;
System.out.println(s);
}
}

File的构造方法里的参数——路径:

|--可以是文件,也可以是文件夹

|--可以是相对路径,也可以是绝对路径

|--可以存在,也可以不存在(只是把路径封装成File对象,而已)

import java.io.*;
/**
* File类的基本方法
*/
public class T010File基本方法 {
public static void main(String[] args) throws IOException {
String userDir = System.getProperty("user.dir");
System.out.println(userDir);
File file = new File(userDir);
System.out.println("是文件吗?" + file.isFile());
System.out.println("是目录吗?" + file.isDirectory());
System.out.println("文件多少字节?" + file.length());
System.out.println("文件名【getName】" + file.getName());//文件夹返回0
System.out.println("绝对路径【getAbsoluteFile】" + file.getAbsoluteFile());
System.out.println("上层路径【getParent】" + file.getParent());
System.out.println("=====临时文件=====");
File fileTemp = File.createTempFile("tmp_", ".txt", file);
System.out.println("临时文件:" + fileTemp.getAbsolutePath());
System.out.println("临时文件【exists】:" + fileTemp.exists());
System.out.println("JVM退出时删除临时文件");
fileTemp.deleteOnExit();
}
}

递归扫描文件夹

import java.io.*;
public class folderScanner {
public static void main(String[] args) {
try {
getFiles("C:\\Program Files\\Java");
} catch (IOException e) {
e.printStackTrace();
}
}
private static void getFiles(String path_src) throws IOException {
File pathS_Files = new File(path_src);
if (!pathS_Files.isDirectory()) {
System.out.println("输入的文件夹路径有误!");
return;
}
File[] listFiles = pathS_Files.listFiles();
for (int i = 0; i < listFiles.length; i++) {
File f1 = listFiles[i];
if (f1.isDirectory()) {
// 如果是文件夹,继续往下找
getFiles(f1.getAbsolutePath());
} else if (f1.isFile()) {
System.out.println(f1.getAbsolutePath());
}
}
}
}

升级:过滤文件

public File[] listFiles(FileFilter filter)方法,可以过滤获取到的文件,需要实现FileFilter接口。

下面示例大部分代码和上例一样,只是加入了FileFilter,

import java.io.*;
/**
* ↓↓↓用于抽象路径名(即File对象)的过滤器。
*/
class MyFileFilter implements FileFilter {
@Override
// accept:过滤文件的方法
// 参数:遍历目录得到的每一个文件(File对象)
public boolean accept(File pathname) {
if (pathname.isDirectory()) {
// 是文件夹,放行
return true;
} else if (pathname.getName().toLowerCase().endsWith(".txt")) {
// 是匹配的文件,放行
return true;
} else {
// 其它文件,过滤掉
return false;
}
}
}
public class folderScanner {
public static void main(String[] args) {
try {
getFiles("C:\\Program Files\\Java");
} catch (IOException e) {
e.printStackTrace();
}
}
private static void getFiles(String path_src) throws IOException {
File pathS_Files = new File(path_src);
if (!pathS_Files.isDirectory()) {
System.out.println("输入的文件夹路径有误!");
return;
}
// ↓↓↓
// 本例核心代码:两个版本(其实还能写个匿名内部类版本)
// File[] listFiles = pathS_Files.listFiles(new MyFileFilter());
// * FileFilter接口只有一个方法,于是可以采用Lambda表达式写法:
File[] listFiles = pathS_Files.listFiles((pathname) -> {
if (pathname.isDirectory()) {
// 是文件夹,放行
return true;
} else if (pathname.getName().toLowerCase().endsWith(".txt")) {
// 是匹配的文件,放行
return true;
} else {
// 其它文件,过滤掉
return false;
}
});
// ↑↑↑
for (int i = 0; i < listFiles.length; i++) {
File f1 = listFiles[i];
if (f1.isDirectory()) {
// 如果是文件夹,继续往下找
getFiles(f1.getAbsolutePath());
} else if (f1.isFile()) {
System.out.println(f1.getAbsolutePath());
}
}
}
}

练习:在控制台输入路径,扫描该文件夹,并统计一共有多少个文件、多少个文件夹、多少个java代码文件。

创建和删除相关

package day0422;
import java.io.File;
import java.io.IOException;
public class TestNewFile {
public static void main(String[] args) {
File f = new File("2.txt");
try {
// 创建新文件,成功为true,不覆盖
// 文件夹必须存在,否则抛异常
boolean create = f.createNewFile();
System.out.println(create);
} catch (IOException e) {
e.printStackTrace();
}
// ----------------------------
// 创建单层文件夹
f = new File("2");
boolean mkdir = f.mkdir();
System.out.println(mkdir);
// 创建多层文件夹(“4.txt”作为文件夹名而创建)
f = new File("2\\3\\4.txt");
boolean mkdirs = f.mkdirs();
System.out.println(mkdirs);
// 删除文件或文件夹(最后一层)
// |--最后一层文件夹中有内容,不删,返回false
// |--路径不存在,返回false
// |--不走回收站
boolean delete = f.delete();
System.out.println(delete);
}
}

应用:创建文件,若有同名文件,删之。

import java.io.*;
public class T011File无则建有则删 {
public static void main(String[] args) {
File f1 = new File("tmp_File有则删.txt");
if (f1.exists()) {
boolean delete = f1.delete();
System.out.println("删除同名文件:" + delete);
}
try {
boolean ret = f1.createNewFile();
System.out.println("创建文件:" + ret);
} catch (IOException e1) {
e1.printStackTrace();
}
}
}

Java 7的nio.file包

Paths类

和File类比较像

import java.nio.file.Path;
import java.nio.file.Paths;
public class T031nioPaths {
public static void main(String[] args) throws Exception {
String _user_dir = System.getProperty("user.dir");
// 获取Path对象
Path _path = Paths.get(_user_dir);
System.out.println(".toAbsolutePath()【】" + _path.toAbsolutePath());
// 根路径
System.out.println(".getRoot()【】" + _path.getRoot());
// 包含的路径(不含根路径)
int nameCount = _path.getNameCount();
for (int i = 0; i < nameCount; i++) {
System.out.println("\t" + _path.getName(i));
}
System.out.println(".getNameCount()包含的路径数量【】" + nameCount);
// 以多个String来构建Path对象
Path path2 = Paths.get("g:", "publish", "codes");
System.out.println(path2);
}
}

Files类

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.nio.charset.*;
import java.nio.file.FileStore;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
public class T032nioFiles {
public static void main(String[] args) throws Exception {
System.out.println("=====Files.copy:复制文件=====");
Path _path源文件 = Paths.get("testRead.dat");
OutputStream os = new FileOutputStream("Files.copy.txt");// 工作路径下
long copy = Files.copy(_path源文件, os);
System.out.println("Files.copy() return value = " + copy);
System.out.println("Files.size(源文件):" + Files.size(_path源文件));
System.out.println("=====Files.readAllLines:读文件=====");
List<String> lines = Files.readAllLines(_path源文件, Charset.forName("utf-8"));
System.out.println("Files.readAllLines()读到的行数——" + lines.size());
System.out.println("=====Files.write:写文件=====");
List<String> _list = new ArrayList<>();
_list.add("我西牛贺洲者,不贪不杀,养气潜灵,虽无上真,人人固寿;");
_list.add("但那南赡部洲者,贪淫乐祸,多杀多夺,正所谓口舌凶场,是非恶海。");
Path _pathW = Files.write(Paths.get("Files.write.txt"), _list, Charset.forName("gbk"));
System.out.println("写入文件——" + _pathW.toAbsolutePath());
System.out.println("=====FileStore:查看C盘空间=====");
FileStore cStore = Files.getFileStore(Paths.get("C:"));
System.out.println("C:共有空间:" + cStore.getTotalSpace());
System.out.println("C:可用空间:" + cStore.getUsableSpace());
// -------------------------------------
System.out.println("=====使用Java 8的Stream API列出当前目录下所有文件和子目录=====");
Files.list(Paths.get(".")).forEach(path -> System.out.println(path));
// -------------------------------------
System.out.println("=====使用Java 8的Stream API读取文件内容=====");
Files.lines(_path源文件, Charset.forName("utf-8")).forEach(line -> System.out.print(line));
}
}

Java基础教程——File类、Paths类、Files类的更多相关文章

  1. File、Paths和Files类的使用详解

    Paths:通过get()方法返回一个Path对象,Path用于表示文件路径和文件. Files:提供了大量处理文件的方法,例如文件复制.读取.写入,获取文件属性.快捷遍历文件目录等..... Fil ...

  2. Java基础教程(12)--深入理解类

    一.方法的返回值   当我们在程序中调用方法时,虚拟机将会跳转到对应的方法中去执行.当以下几种情况发生时,虚拟机将会回到调用方法的语句并继续向下执行: 执行完方法中所有的语句: 遇到return语句: ...

  3. Java基础之File类的使用

    Java基础之File类的使用 1.File类的构造方法和常用方法 2.对File中listFile(FileNameFilter name)学习 3.与File文件类相关的实现 File类的构造方法 ...

  4. Xamarin.FormsShell基础教程(9)Shell相关类体系

    Xamarin.FormsShell基础教程(9)Shell相关类体系 在Shell中,最为主要的类是Shell类.Shell类实现了大多数应用程序所需的基本UI功能的页面.除此以外,常用的类还有Sh ...

  5. Java基础系列2:深入理解String类

    Java基础系列2:深入理解String类 String是Java中最为常用的数据类型之一,也是面试中比较常被问到的基础知识点,本篇就聊聊Java中的String.主要包括如下的五个内容: Strin ...

  6. Java基础(十一) Stream I/O and Files

    Java基础(十一) Stream I/O and Files 1. 流的概念 程序的主要任务是操纵数据.在Java中,把一组有序的数据序列称为流. 依据操作的方向,能够把流分为输入流和输出流两种.程 ...

  7. Java基础教程:JDBC编程

    Java基础教程:JDBC编程 1.什么是JDBC JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库. JDBC A ...

  8. Java基础教程(25)--I/O

    一.I/O流   I/O流表示输入源或输出目标.流可以表示许多不同类型的源和目标,例如磁盘文件.设备.其他程序等.   流支持许多不同类型的数据,包括字节.原始数据类型.字符和对象等.有些流只传递数据 ...

  9. Java基础教程(18)--继承

    一.继承的概念   继承是面向对象中一个非常重要的概念,使用继承可以从逻辑和层次上更好地组织代码,大大提高代码的复用性.在Java中,继承可以使得子类具有父类的属性和方法或者重新定义.追加属性和方法. ...

随机推荐

  1. F2. Same Sum Blocks (Hard) 解析(思維、前綴和、貪心)

    Codeforce 1141 F2. Same Sum Blocks (Hard) 解析(思維.前綴和.貪心) 今天我們來看看CF1141F2(Hard) 題目連結 題目 給你一個數列\(a\),要你 ...

  2. oracle 查询数据库锁及锁处理

    1.数据库锁表查询语句: SELECT SESS.SID, SESS.SERIAL#, LO.ORACLE_USERNAME, LO.OS_USER_NAME, AO.OBJECT_NAME 被锁对象 ...

  3. 吐槽一下Abp的用户和租户管理模块

    1. 背景 ASP.NET Core 基于声明的访问控制到底是什么鬼? 聊到基于声明的身份认证将 身份和签发机构分离,应用程序信任签发机构,故认可签发的身份信息. -- --- --- --- Cla ...

  4. 4G DTU比GPRS/3G DTU的优势

    4G DTU一般来说是采用电脑和数据线连接来进行参数设置的,为了适应不同的工作环境,提高工作的效率,成都远向电子4G DTU还支持远程参数配置和远程固件升级,只需一部手机即可轻松完成操作.今天我们就来 ...

  5. MyBatis 原理浅析——基本原理

    前言 MyBatis 是一个被广泛应用的持久化框架.一个简单的使用示例如下所示,先创建会话工厂,然后从会话工厂中打开会话,通过 class 类型和配置生成 Mapper 接口的代理实现,最后使用 Ma ...

  6. 蒲公英 · JELLY技术周刊 Vol.28: Next.js 10 发布

    蒲公英 · JELLY技术周刊 Vol.28 前端应用到底该选 SSR 还是 CSR?每个项目技术栈决策的时候都会根据实际需求有自己的看法,而在不久前 React 17 发布之后,自然而然也会有同学好 ...

  7. linux添加自动清空缓存

    1. cleanCache.sh vim cleanCache.sh #!/bin/bash #每两小时清除一次缓存 echo "开始清除缓存" sync;sync;sync #写 ...

  8. 洛谷P6623——[省选联考 2020 A 卷] 树

    传送门:QAQQAQ 题意:自己看 思路:正解应该是线段树/trie树合并? 但是本蒟蒻啥也不会,就用了树上二次差分 (思路来源于https://www.luogu.com.cn/blog/dengy ...

  9. leetcode110:combination-sum-ii

    题目描述 给出一组候选数C和一个目标数T,找出候选数中起来和等于T的所有组合. C中的每个数字在一个组合中只能使用一次. 注意: 题目中所有的数字(包括目标数T)都是正整数 组合中的数字 (a 1,  ...

  10. Java -- "final" 的理解

    Java具有继承和多态的特性,这也造就了Java语言的面向对象的灵活性.但是,过于灵活就意味的有失控的可能性. 于是,产生了final 的概念 -- 为了数据的绝对安全,无法被后期修改,英文称之为 m ...