Java学习笔记之IO(一):File类的用法

package com.io;

import java.io.File;

import org.junit.Test;

/*
IO流,也叫输入输出流(input、 output);

IO技术主要的作用使解决设备与设备之间的数据传输问题;比如:硬盘-->内存;    内存-->硬盘;

IO技术的应用场景:导出报表、上传、下载、解析xml文件...

数据一般是以文件的形式保存到硬盘上的;于是sun公司就使用了一个 File 类来描述文件或者文件夹;

 */

public class Demo1 {

	/*
	File类的构造方法:
		File(String pathname):根据指定路径的文件或者文件夹创建一个File类对象;
		File(File parent, String child):根据parent路径名对应的File对象和child路径名创建一个File对象;
		File(String parent, String child):根据parent路径名和child路径名创建一个File对象;
	 */	
	@Test
	public void test1(){
		// 根据指定路径的文件或者文件夹创建一个File类对象;
		File file1 = new File("D:\\a.text");
		System.out.println("文件存在吗?" + file1.exists()); // exist():判断文件是否存在;
		
		File file2 = new File("D:\\");
		System.out.println("文件夹存在吗?" + file2.exists());

		File file3 = new File("D:\\test");
		System.out.println("文件夹存在吗?" + file3.exists());
	}
	
	@Test
	public void test2(){
		File parentFile = new File("D:\\");
		File file = new File(parentFile, "a.txt");
		System.out.println("文件是否存在:" + file.exists());
		
		File file2 = new File("D:\\", "a.txt");
		System.out.println("文件是否存在:" + file2.exists());
	}
	
	
	/*	
	目录分隔符:在Windows系统上的目录分隔符是\,该符号不能单独使用,需要转义(\);在linux系统上的目录分隔符是/;
		但是,windows系统可以使用两种目录分隔符,写成/也可以,而且只需要写一个/就行;
		其他操作系统都是只认一种目录分隔符;
	 */
	@Test
	public void test3(){
		// File.separator:获取当前系统所使用的目录分隔符;Java会自动匹配当前系统,获取对应的目录分隔符;
		System.out.println(File.separator);	
		
		String filepath = "D:" + File.separator + "a.txt";
		System.out.println("文件路径:" + filepath);	// 文件路径:D:\a.txt
	}
	
	
	/*
	路径问题:
		绝对路径:该文件在硬盘上的完整路径;一般都是以盘符开头的; 
		相对路径:资源文件相对于当前程序所在的路径;
			. 代表当前路径;
			.. 代表上一级路径;
			注意:如果资源文件与当前程序不在同一个盘符下面,是无法写出相对路径的;
	 */
	@Test
	public void test4(){
		File file = new File(".");
		System.out.println("获取当前程序的绝对路径:" + file.getAbsolutePath());
		
		File file2 = new File("..\\..\\..\\a.txt");
		System.out.println("文件是否存在:" + file2.exists());
		
		// 如果在src目录下创建一个新的文件b.txt,那么相对路径可以直接写成下面的样式;
		File file3 = new File("src\\b.txt");
		System.out.println("文件是否存在:" + file3.exists());
	}
	
}


package com.io;

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.junit.Test;

/*
File类的常见方法:

	创建方法:
		createNewFile():在指定位置创建一个文件;创建成功,返回true;如果文件已经存在,创建失败,返回false;
		mkdir():在指定位置创建目录;只能创建最后一级目录,如果上级目录不存在就会抛异常;
		mkdirs():在指定位置创建目录;可以创建多级目录;
		renameTo(File dest):重命名文件或文件夹;
		
	删除方法:
		delete():删除一个文件或一个空文件夹;成功返回true;失败返回false;
		deleteOnExit():在虚拟机终止时,请求删除此抽象路径名表示的文件或目录;
						保证程序异常时创建的临时文件也可以被删除;

	判断方法:
		exists():判断文件或文件夹是否存在;
		isFile():判断是否是文件;
		isDirectory():判断是否是文件夹;
		isHidden():判断是否是一个隐藏的文件,或是否是一个隐藏的目录;
		isAbsolute():判断是否是绝对路径;
		
	获取方法:
		getName():获取文件或文件夹的名称,不包含上级路径;不管文件是否存在;
		getPath(): 返回路径;
		getAbsolutePath():获取文件的绝对路径,与文件是否存在没关系
		length():获取文件的大小(字节数),如果文件不存在则返回0,如果是文件夹也返回0。
		getParent():返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null。
		lastModified():获取最后一次被修改的时间。
		
		文件夹相关:
		static File[] listRoots():列出所有的根目录(Window中就是所有系统的盘符)
		
		list():返回目录下的文件或者目录名,包含隐藏文件。对于文件这样操作会返回null。
		listFiles():返回目录下的文件或者目录对象(File类实例),包含隐藏文件。对于文件这样操作会返回null。
		
		list(FilenameFilter filter):返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。
		listFiles(FilenameFilter filter):返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。
 */


// 自定义文件名过滤器
class MyFilter implements FilenameFilter{

	// dir:文件夹;	name:文件名;
	@Override
	public boolean accept(File dir, String name) {
		System.out.println(name);
		// 过滤规则:
		return name.endsWith(".java");
	}
	
}

public class Demo2 {

	// 创建方法
	@Test
	public void create() throws IOException{
		// 创建指定的文件
		File file = new File("D:\\a.txt");
		System.out.println("创建成功了吗?" + file.createNewFile());
		
		// 在指定位置创建目录;创建成功,返回true;如果目录已经存在,创建失败,返回false;
		File dir = new File("D:\\aa");
		System.out.println("创建目录成功了吗?" + dir.mkdir());

		// 只能创建最后一级目录,如果上级目录不存在,就会报错;
		File dir2 = new File("D:\\aaa\\bbb");
		System.out.println("创建目录成功了吗?" + dir2.mkdir());
		
		// 创建多级目录
		File dirs = new File("D:\\aaa\\bbb");
		System.out.println("创建多级目录成功了吗:" + dirs.mkdirs());
		
		// renameTo():如果目标文件与源文件是在同一个目录下,那么renameTo()的作用是重命名;
		// 如果不是在同一个目录下,renameTo()的作用就是剪切;
		File destFile = new File("D:\\abc.txt");
		System.out.println("重命名文件:" + file.renameTo(destFile));
		
		// 如果目标文件夹与源文件夹在同一目录下,且源文件夹是空文件夹,那么可以重命名;如果源文件夹是非空的,则不能操作;
		File d1 = new File("D:\\test");
		File d2 = new File("D:\\aaaaaatest");
		System.out.println("重命名文件夹:" + d1.renameTo(d2));

		// 如果目标文件夹与源文件夹不在同一目录下,则不能操作;
		File d3 = new File("D:\\test");
		File d4 = new File("E:\\aaaaaatest");
		System.out.println("重命名文件夹:" + d3.renameTo(d4));
	}
	
	// 删除方法
	@Test
	public void delete(){
		// 删除指定的文件;
		File file = new File("D:\\a.txt");
		System.out.println("删除文件:" + file.delete());
		
		// 删除文件夹;只能删除空的文件夹;
		File file2 = new File("D:\\aa");
		System.out.println("删除文件夹:" + file2.delete());
		
		// jvm退出时删除文件或文件夹;如果文件或文件夹存在,就删除;如果不存在,没有任何操作;
		file2.deleteOnExit();	
		
	}
	
	// 判断方法
	@Test
	public void judge(){
		File file = new File("D:\\a.txt");
		System.out.println("判断文件是否存在:" + file.exists());
		System.out.println("判断是否是文件:" + file.isFile());
		System.out.println("判断是否是目录:" + file.isDirectory());
		System.out.println("判断是否隐藏:" + file.isHidden());
		System.out.println("判断是否是绝对路径:" + file.isAbsolute());
	}
	
	// 获取方法
	@Test
	public void getFile(){
		// 获取文件的名称;即使文件不存在,也可以获取;
		File file = new File("D:\\test\\a.txt");
		System.out.println("获取文件名:" + file.getName()); 	// 文件名:a.txt
		
		// 获取文件或文件夹的路径;创建File对象的时候传入什么路径,他就获取什么路径;
		File dir = new File("..\\..\\test");
		System.out.println("获取路径:" + file.getPath());
		System.out.println("目录路径:" + dir.getPath());
		
		// 获取文件的绝对路径;在创建File对象时指定的路径前面,加上当前程序的绝对路径;
		System.out.println("绝对路径:" + dir.getAbsolutePath());//D:\myeclipse\workspace\IO\..\..\test
		
		// 获取文件的大小
		System.out.println("文件的大小(字节数):" + file.length());
		
		// 获取文件或文件夹的父路径;根据创建File对象时传入的路径来获取;不管文件是否存在;
		System.out.println("父路径:" + dir.getParent());	// 父路径:..\..
		
		// 获取文件最后一次被修改的时间;
		File f = new File("D:\\a.txt");
		long last = f.lastModified();
		System.out.println("最后一次被修改的时间(毫秒值):" + last); // 1506675946380
		Date date = new Date(last);
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String strDate = dateFormat.format(date);
		System.out.println("最后一次被修改的时间:" + strDate);
	}

	// 获取方法
	@Test
	public void getDir(){
		// 获取所有的根目录;
		File[] roots = File.listRoots();
		for (int i = 0; i < roots.length; i++){
			System.out.println(roots[i].getAbsolutePath());
		}
		System.out.println("-------------");
		
		// 获取指定目录下所有的文件及文件夹;只获取文件或文件夹的名字;
		File file = new File("D:\\myeclipse\\workspace\\IO");
		String[] strs = file.list();
		for (String str : strs){
			System.out.println(str);
		}
		System.out.println("-------------");
		
		// 获取指定目录下所有的文件及文件夹;获取的是对应的File对象;
		File[] files = file.listFiles();
		for (File f : files){
			System.out.println(f.getAbsolutePath());
		}
		System.out.println("-------------");
	}
	
	// 文件名过滤器
	@Test
	public void listJava(){
		File file = new File("D:\\myeclipse\\workspace\\IO");
		if (!file.exists()){
			System.out.println("文件夹不存在;");
			return;
		}
		// 如果文件名过滤器中的accept()方法返回true,则将符合规则的文件放入File数组中;
		File[] files = file.listFiles(new MyFilter());
		for (File f : files){
			System.out.println(f);
		}
	}
	
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值