Java基础教程——File类、Paths类、Files类

beat365在线官网 📅 2026-02-14 18:47:07 ✍️ admin 👁️ 9475 ❤️ 140
Java基础教程——File类、Paths类、Files类

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 lines = Files.readAllLines(_path源文件, Charset.forName("utf-8"));

System.out.println("Files.readAllLines()读到的行数——" + lines.size());

System.out.println("=====Files.write:写文件=====");

List _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));

}

}

相关推荐

1亿后面有多少个0?有几个100
bet·365

1亿后面有多少个0?有几个100

📅 08-27 👁️ 8832
脖子被抓伤疼很不舒服
beat365在线官网

脖子被抓伤疼很不舒服

📅 10-26 👁️ 4752
罗技G930( Logitech G930 )
bet·365

罗技G930( Logitech G930 )

📅 08-10 👁️ 6943