File类和Files类

本文介绍了Java中File类和Files工具类的基本使用,包括获取硬盘分区、创建和操作文件和目录、遍历子文件、复制文件、读写文件内容以及目录的深度遍历。
摘要由CSDN通过智能技术生成

File类:用于访问磁盘的“目录”或“文件”

Files:工具类,提供“常规”的目录或文件按的工具方法

File.listRoots():获取当前硬盘中的所有分区

File[] roots = File.listRoots();

创建File对象时,必须传入目录(文件)的路径

获取目录的相关信息

//每个目录都是一个File类型的对象
		//字符串类型的文件路径
		String path="D:\\Test\\music";
		//创建File对象时,必须传入目录(文件)的路径
		File dir=new File(path);
		//获取目录的相关信息
		System.out.println("目录的路径:"+dir.getPath());
		System.out.println("目录的名称:"+dir.getName());
		
		System.out.println("父目录的路径:"+dir.getParent());
		System.out.println("父目录的名称:"+dir.getParentFile().getName());
		

进获取子文件(音乐文件)

package com.xn.Mon;

import java.io.File;
import java.io.FileFilter;

public class Mon03 {
	public static void main(String[] args) {
		File dir=new File("D:\\Test\\music");
		//进获取子文件(音乐文件)
		File[] listFiles=dir.listFiles(new FileFilter() {
			
			@Override
			public boolean accept(File f) {
				//每个文件传入
				if(f.isDirectory()||!f.getName().endsWith(".mp3")) {
				return false;	
				}
				return true;
			}
		});
		for(File f:listFiles) {
			System.out.printf("音乐文件%s的文件内容长度是:%d字节\n",f.getName(),f.length());
		}
	}
}

创建目录

package com.xn.Mon;

import java.io.File;

public class Mon04 {
	public static void main(String[] args) {
		//创建目录
		
		//创建单层目录
		//传入一个目录路径(不能存在的)
		File dir1=new File("D:\\Test\\music\\02");
		boolean ismkdir=dir1.mkdir();
		System.out.println(dir1.getName()+"创建"+ismkdir);
		//创建多层目录
		File dir2=new File("D:\\Test\\music\\03\\aa\\bb");
		dir2.mkdirs();
	}
}

创建文件

package com.xn.Mon;

import java.io.File;
import java.io.IOException;

public class Mon05 {
	public static void main(String[] args) {
		//创建文件
		File f=new File("D:\\Test\\music\\03\\yoyo.mp3");
		try {
			f.createNewFile();
		}catch(IOException e){
			e.printStackTrace();
		}
	}
}

文件的复制

package com.xn.Mon;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;

public class Mon07 {
	public static void main(String[] args) {
		//文件的复制
		//Files.copy(source, target,options);
		try {
			//源文件路径
			File sourcefile = new File("D:\\Test\\music");
			Path source = sourcefile.toPath();
			//目标文件路径
			Path target = Paths.get("D:\\Test\\music\\01\\歌曲.mp3");
			//复制
			//仅复制一次,不允许重复复制
			//Files.copy(source, target);
			//Files.copy(source,target,StandardCopyOption.COPY_ATTRIBUTES);

			
			//复制多次,允许重复复制
			Files.copy(source, target,StandardCopyOption.REPLACE_EXISTING);
			} 
		catch (IOException e) {
			e.printStackTrace();
		}
	
	}
}

读取文件内容(文本文件)

package com.xn.Mon;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

public class Mon08 {
	public static void main(String[] args) {
		//读取文件内容(文本文件)
		try {
			//读取文本文件中的内容
			List<String> lines=Files.readAllLines(Paths.get("D:\\Test\\music\\LICENSE"));
					for(String ln:lines) {
						System.out.println(ln);
					}
		}catch(IOException e) {
			e.printStackTrace();
		}
	}
}

写入文件(文木文件)

package com.xn.Mon;

import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.OpenOption;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;

public class Mon09 {
	
	public static void main(String[] args) {
		//写入文件(文木文件)
		//Files.write(path,lines,options);
		//Files,write(path,字节数组,options);
		//Files,write(path,Collection单例集合,指定字符编码集,options);

		
		//案例1
		//写入文件,内容来自一个集合
		try {
			//一个保存若干个字符串的单列集合(collection类型)
			//list
			ArrayList<String> list=new ArrayList<String>();
			list.addAll(Arrays.asList("北京","上海","深圳"));
			//set
			HashSet<String> set=new HashSet<String>();
			set.addAll(Arrays.asList("豆浆","面包","馒头"));
			//将集合的内容写入文本文件
			Files.write(Paths.get("D:\\Test\\music\\city.txt"), list,Charset.forName("utf-8") );
		}catch(IOException e) {
			e.printStackTrace();
		}
		//案例2
		//写入文件,内容来自一个字节数组
		try {
			//byte[] array1={65,66,67,68,69}
			byte[] array2="床前明月光疑是地上霜".getBytes();
			//覆盖原来的内容
			//Files.write(Paths.get("D:\\Test\\music\\city.txt"), array2)
			Files.write(Paths.get("D:\\Test\\music\\city1.txt"), array2, StandardOpenOption.CREATE_NEW);
		}catch(IOException e) {
			e.printStackTrace();
		}
	}
}

获取当前目录下的所有子文件和子目录

package com.xn.Mon;

import java.io.File;
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;

public class Mon10 {
	public static void main(String[] args) {
		// 深度遍历文件目录
		File root = new File("D:\\Test");
		// 方式1:递归的方式
		// showFiles1(root);
		showFiles2(root);
	}

	private static void showFiles1(File dir) {

		System.out.println(dir);
		// 获取当前目录下的所有子文件和子目录
		File[] listFiles = dir.listFiles();
		if (listFiles != null) {
			// 遍历所有的子文件和子目录
			for (File f : listFiles) {
				if (f.isDirectory()) {
					// 如果是目录,递归调用
					showFiles1(f);
					// 如果是文件,打印内容
				} else if (f.isFile()) {
					System.out.println(f);
				}
			}
		}
	}

	private static void showFiles2(File dir) {
		Path start =dir.toPath();
		try {
			Files.walkFileTree(start, new SimpleFileVisitor<Path>(){
			//处理目录
//			@Override
//				public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
//					System.out.println(dir);
//					return FileVisitResult.CONTINUE;
//				}
				
			@Override
			public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
				System.out.println(dir);
				return FileVisitResult.CONTINUE;
			}
			@Override
				public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
					System.out.println(file);
					return FileVisitResult.CONTINUE;
				}
			});
		}catch(IOException e) {
			e.printStackTrace();
		}
	}
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值