zoukankan      html  css  js  c++  java
  • 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("	" + _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));
    	}
    }
    
  • 相关阅读:
    算法图解-散列表
    算法图解-笔记
    ERROR:cannot read property 'getAttribute' of null 报错处理
    Error: Cannot find module 'node-sass' 报错处理
    一、Spring Cloud概述
    十、ActiveMQ多节点集群
    九、ActiveMQ的消息存储和持久化
    八、ActiveMQ的传输协议
    七、SpringBoot整合ActiveMQ
    六、Spring整合ActiveMQ
  • 原文地址:https://www.cnblogs.com/tigerlion/p/11179220.html
Copyright © 2011-2022 走看看