文件操作

文件操作—File

1、 创建File对象

2、 File表示文件信息

3、 File表示目录信息

创建File对象

1、 代表硬盘上的文件或文件夹(也叫作目录)

2、 使用new File创建文件或文件夹,new File只是在内存中创建一个对象,并不是在硬盘创建文件或文件夹,File类型的对象可以代表文件也可以代表文件夹

3、 在java中,无论是什么系统,都可以使用斜线作为路径的分隔符。分隔符也可以使用File.sepatator这个常量表示,以避免不同系统带来的差异。

4、 Java.io.File用于表示文件或文件夹,也就是说程序员可以通过File类在程序中操作硬盘上的文件和目录。

5、 File类只用于表示文件或文件夹的信息,不能对文件的内容镜像访问。

6、 关于文件路径分隔符:3中写法:

        1、File.separator会自动变化:Windows:\    Linux:/:

        String path="demo"+File.separator+"hello.txt";

        2、Windows专用:String path2="demo\\hello.txt";

        3、通用写法:windows linux unix:Stringpath3="demo/hello.txt";

public void testFile1() {
		//File代表文件/文件夹(目录)
		//创建文件对象:只是创建内存对象
		//关于文件路径分隔符:3中写法
		//File.separator会自动变化:Windows:\    Linux:/
		String path="demo"+File.separator+"hello.txt";
		System.out.println(path);//demo\hello.txt
		//Windows专用
		String path2="demo\\hello.txt";
		System.out.println(path2);//demo\hello.txt
		//通用写法:windows linux unix
		String path3="demo/hello.txt";
		System.out.println(path3);//demo/hello.txt
		//创建file对象
		File file=new File(path3);
		System.out.println(file);//demo\hello.txt
	}

7、如果在软件中需要操作文件/文件夹时候,就需要使用File API。

8、File API可以提供在程序中进行文件管理操作也就是在Java软件中进行文件/文件夹增删改查操作。

9、File API提供了方法:文件/文件夹增删改查操作。

       1、构造器:只是创建内存对象,不是创建磁盘文件

              newFile(pathname)

10、此对象在硬盘到底是否存在?使用FileAPI方法exists()检查文件/文件夹是否存在

public void testExist() {
		String path1="C:/Windows";
		String path2="C:/hi";
		File file1=new File(path1);//new File()只是创建对象,不是创建硬盘文件
		File file2=new File(path2);
		System.out.println(file1.exists());//检查file1对应的硬盘上的文件是否存在,true
		System.out.println(file2.exists());//检查file2对应的硬盘上的文件是否存在,false
	}

11、isFile()方法,isDirectory()方法:

       File的isFile方法用于判断当前File对象所表示的是否为一个文件

       ---booleanisFile()

       ---返回值:当前File对象所表示是一个文件时返回true

public void testIsFile() {
		String path1="C:/Windows";
		String path2="C:/Windows/bootstat.dat";
		File file1=new File(path1);
		File file2=new File(path2);
		System.out.println(file1.isFile());//false
		System.out.println(file1.isDirectory());//true
		System.out.println(file2.isFile());//true
		System.out.println(file2.isDirectory());//false
	}

总结:

1、File对象只是内存对象,创建内存file对象,不是在文件系统创建文件

2、构造方法:new File()必须有参数

        1、File file=new File(path)

            Path:是文件或文件夹的目录

        2、File file=new File(parent,path)

            Parent:是父目录

            Path:是子目录/文件

            如:new File(“C:、Windows”,“0.log”);

File表示文件信息:

1、length()方法:

File的length方法用于返回由此抽象路径名表示的文件的长度(占用的字节量)

---long length()

---返回值:当前File对象所表示的文件所占用的字节量

        public void testFileLength() {
		String path="C:/Windows/bootstat.dat";
		File file=new File(path);
		long size=file.length();
		long time=file.lastModified();
		System.out.println(size+"byte");//67584byte
		SimpleDateFormat fmt=new SimpleDateFormat("yyyy-M-d HH:mm:ss");
		System.out.println(fmt.format(time));//2018-4-16 21:40:33
	}
	
	public void testPath() throws Exception {
		//绝对路径和相对路径
		//绝对路径:从/(根目录)开始的路径
		//相对路径:从当前目录开始,Java中是Java软件的启动目录,在Eclipse中是项目所在的文件夹。
		//new File(".")使用相对路径创建file对象
		//.的绝对位置(绝对路径)在哪里?
		File current=new File(".");
		//Absolute绝对的path路径
		String path1=current.getAbsolutePath();
		//Canonical规范版本的绝对路径(标准的)
		String path2=current.getCanonicalPath();
		System.out.println(path1);//E:\Users\15841\eclipse-workspace\API\.这是规范版本的
		System.out.println(path2);//E:\Users\15841\eclipse-workspace\API
	}

2、exists()方法:

File的exists方法用于测试此抽象路径名表示的文件或目录是否存在。

---boolean exists()

---返回值:若该File表示的文件或目录存在则返回true,否则返回false。

3、createNewFile()方法:

File的createNewFile方法用于当前仅当不存在具有此抽象路径名指定的名称的文件时,原子地创建由此抽象路径名指定的一个新的空文件。

---boolean createNewFile()

---返回值:如果指定的文件不存在并成功的创建,则返回true;如果指定的文件已经存在,则返回false。

public void testcreateNewFile() throws Exception {
		//在当前目录(Eclipse项目文件夹)中创建新文件
		//String path="./demo.txt";
		String path="demo.txt";//和上一句一样,用哪个都行
		File file=new File(path);
		boolean success=file.createNewFile();
		if(success) {
			//因为每运行一次都会看有没有创建文件,除了第一次返回的都是false
			System.out.println("创建成功");
		}
		String pathname=file.getCanonicalPath();//获得规范版本的绝对路径
		System.out.println(pathname);//E:\Users\15841\eclipse-workspace\API\demo.txt
	}

4、delete()方法:

File文件的delete方法用于删除此抽象路径名表示的文件或目录。

---boolean delete()

---返回值:当且仅当成功删除文件或目录时,返回true,否则返回false。

需要注意的是,若此File对象所表示的是一个文件夹时,在删除时需要保证此为空文件夹才可以成功删除,文件夹中不能含有任何的子项,如果含有子文件或子文件夹,需要先将子文件或子文件夹删除,才可以删除空文件。

删除文件只是删除了磁盘上的文件,file对象还是存在的。

public void testDelete() {
		File file=new File("demo.txt");
		boolean success=file.delete();
		if(success) {
			System.out.println("成功的删除");
			System.out.println(file.exists());//false
		}
	}

5、isDirectory()方法:

File的isDirectory方法用于判断当前File表示的是否为一个目录。

---boolean isDirectory()

---返回值:当File对象表示的是一个目录时返回true,否则返回false。

File表示目录信息:

1、mkdir()方法:

File的mkdir方法用于创建此抽象路径名指定的目录,也就是创建文件夹。

---boolean mkdir()

---返回值:当且仅当已创建目录时,返回true,否则返回false。

        public void testMkdir() throws IOException {
		//在当前目录中创建文件夹demo
		File file=new File("demo");
		boolean success=file.mkdir();
		if(success) {
			System.out.println("成功创建文件夹");
			System.out.println(file.getCanonicalPath());//E:\Users\15841\eclipse-workspace\API\demo
			System.out.println(file.isDirectory());
		}
		boolean success1=file.delete();
		if(success1) {
			System.out.println("成功删除文件夹");
			System.out.println(file.exists());
		}
	}

2、mkdirs()方法:

File的mkdirs方法用于创建此抽象路径名指定的目录,包括所有必须但不存在的父目录。也就是创建一系列文件夹。注意,此操作失败也可能成功地创建了一部分必需的父目录。

---boolean mkdirs()

---返回值:当且仅当已创建目录以及所必需的父目录时,返回true,否则返回false。

        public void testMkdirs() throws Exception {
		String path="test/demo/data/ab";//删除的时候,先删除ab,再删除data...
		File file=new File(path);
		boolean success=file.mkdirs();
		if(success) {
			System.out.println("创建一系列文件夹");
			System.out.println(file.getCanonicalPath());
		}
	}

3、listFiles()方法:

这个方法用来检查一个文件夹的内容,也就是这个文件夹所有的子项(文件或者文件夹)。

---File[] listFiles()

---返回值:抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件和目录。如果目录为空,那么数组也将为空。如果抽象路径名不是一个目录,或者发生I/O错误,则返回null。

public void testListFiles() {
		//获取一个文件夹的全部内容
		File dir=new File(".");//当前文件夹
		File[] files=dir.listFiles();
		for(File file:files) {
			//如果是文件夹输出[文件夹]
			//如果是文件直接输出文件名
			if(file.isDirectory()) {
				System.out.println("["+file+"]");
			}else {
				System.out.println(file);
			}
		}
	}

4、FileFilter接口:

FileFilter用于抽象路径名的过滤器

此接口的实例可传递给File类的listFiles(FileFilter)方法。用于返回满足该过滤器要求的子项。

---File[] listFiles(FileFilter filter)

        public void testFileFilter() {
		//FileFilter是接口,文件过滤器,声明的文件过滤规则(方法)
		FileFilter filter=new FileFilter() {
			//accept:接受,文件过滤方法
			//方法参数是一个文件,返回true表示接受这个文件
			public boolean accept(File file) {
				//如果参数传递进来的是文件,就返回true
				//也就是接受文件,拒绝文件夹
				return file.isFile();
			}			
		};
		File f1=new File("C:/Windows");
		File f2=new File("C:/Windows/bootstat.dat");
		System.out.println(filter.accept(f1));//fasle
		System.out.println(filter.accept(f2));//true
		//说明:filter只能接受文件!
		//修改accept方法可以改变接受结果!
		File dir=new File(".");//当前目录
		File[] files=dir.listFiles(filter);
		//filter是过滤条件,listFiles会将dir中每个子项目交给accept,如果接受,就返回true,然后这个文件作为返回值放到数组中。
		//files数组中只有文件,没有文件夹
		for(File file:files) {
			System.out.println(file);//.\.classpath    .\.project
		}		
	}

	public void testFileFilter2() {
		//只能接受文件夹
		FileFilter onlyDir=new FileFilter() {
			public boolean accept(File file) {//file在编译期间什么也不是,file在运行期间表示当前目录中的每个文件
				return file.isDirectory();
			}			
		};
		File file=new File(".");
		File[] files=file.listFiles(onlyDir);
		for(File f:files) {
			System.out.println(f);
		}
	}

扩展:

1什么是文件系统?

操作系统:管理软件的软件

软件没有执行之前:在磁盘上的数据+程序文件。这属于文件管理:文件管理系统。

软件正在执行:正在执行的程序称为进程,进程管理也成为进程调度。

正在运行的程序是占用内存的,称为内存管理。

2文件系统管理:如何管理(创建,查找,修改,删除)

    1、 文件系统的物理结构

        NTFS   FAT16  FAT32  exFAT    HPFS   Ext3

    2、 文件系统的逻辑结构

        Windows:C:  D:   E:

        Linux、Unix:/

    3、 文件系统管理就是管理文件的物理结构和逻辑结构,提供文件/文件夹的“增删改查”操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值